Saya mencoba menggunakan fitur vim yang lebih canggih. Bagaimana orang-orang akan melakukan pengeditan berikut?

Dari ini:

ssn=token_payload.fnr,
fname=token_payload.displayName,
email=token_payload.email,
login=token_payload.username,

Untuk ini:

ssn=token_payload['fnr'],
fname=token_payload['displayName'],
email=token_payload['email'],
login=token_payload['username'],
vim
1
ask 25 Mei 2021, 14:09

2 jawaban

Jawaban Terbaik

Baris perintah: perintah norma

Saya akan menerapkan perintah normal berikut ke semua baris dalam file:

" note that in the real command, <Esc> would be a literal 
" press of the escape key (see explanation below)

:%norm f.s['<Esc>f,i']
  • berlaku untuk seluruh file: %
  • perintah mode normal berikut:norm
  • pindah ke periode: f.
  • ganti dengan kurung siku pembuka dan kutipan: s['
  • escape mode insert (tekan ctrl+v untuk memasukkan karakter literal, lalu escape - Anda akan melihat simbol abu-abu muncul): ^[
  • pindah ke koma: f,
  • masukkan tanda kutip dan kurung siku penutup: i']

Saya mulai menggunakan cara baris perintah alih-alih makro baru-baru ini sejak saya menemukan bahwa Anda dapat memikirkannya dengan lebih mudah (terutama jika Anda membuat perintah di buffer perintah dengan q: - lihat :help command-buffer).

Gunakan makro

Cara lain adalah dengan merekam makro:

qa0f.s['<Esc>f,i']<Esc>jq

Yang kemudian dapat Anda terapkan pada baris saat ini dengan @a dan ulangi dengan @@. Atau gunakan :%norm @a untuk menjalankan makro di setiap baris.

Pada dasarnya sama seperti di atas, tetapi alih-alih :%norm Anda menggunakan qa untuk rekam ke dalam register a (Anda dapat menggunakan huruf apa saja). Kemudian lakukan pengeditan. saya menambahkan drop down satu baris dengan j sebelum menghentikan perekaman dengan q.

Anda dapat mengedit makro setelah merekamnya dengan menempelkan konten daftar ("ap), edit, dan tarik kembali ("ay$) sebelum memutar ulang.

Menggunakan alat eksternal

Jika saya ingin melakukan banyak penggantian dengan satu perintah, saya akan memfilter teks melalui program eksternal seperti sed:

:%!sed "s/\./['/; s/,$/'],/"

Satu lagi hal [baik]

Alat yang sangat kuat adalah perintah :g[lobal]! (lihat :help :g) Saya telah telah banyak menggunakannya dalam kombinasi dengan perintah norm. Misalnya, jika saya ingin mendapatkan semua paragraf dalam dokumen yang diformat dengan baik, tetapi tidak mempengaruhi teks indentasi (yang bisa berupa blok kode, atau tabel, dll.) Saya akan melakukan:

:%g/^\w/norm gqap

Ini berarti, untuk setiap baris dengan huruf di awal baris, terapkan perintah gqap yang menerapkan perintah mode normal gq ke 'paragraf'.

Anda mungkin juga ingin menggunakan huruf besar pada kata pertama dan meningkatkan level header dari semua judul penurunan harga seperti:

:%g/^#/norm w~I#

Ini akan mengubah ini:

# a heading
some text.

## another heading
some more text

```sh
    # and a comment in some code will be unaffected
    print('hello world')
```
## a further heading
some text

# conclusion

Ke dalam ini:

## A heading
some text.

### Another heading
some more text

```sh
    # and a comment in some code will be unaffected
    print('hello world')
```
### A further heading
some text

## Conclusion

Lihat video ini untuk hal-hal vim 'lanjutan'

3
mattb 25 Mei 2021, 23:06

Saya akan menerapkan ini sebagai perintah :s. Misalnya, perintah ini akan membuat perubahan yang diminta:

:%s/\.\(.*\),/['\1'],/

Itu beroperasi di semua baris %, mencocokkan titik dan koma dan menempatkan semuanya di antara ke dalam grup (\(.*\)), dan kemudian menggantinya dengan nilai yang diinginkan, cocok dengan grup pertama (\1).

Jika Anda ingin beroperasi pada kumpulan garis yang berbeda, Anda dapat menulis :1,4 sebagai ganti :%, atau menulis :'<,'> untuk mengoperasikan pada pemilihan visual.

3
bk2204 25 Mei 2021, 22:02