Bagaimana saya bisa dengan cepat mengutip / berhenti mengutip kata-kata dan mengubah kutipan (misalnya dari '
menjadi "
) di Vim? Saya tahu tentang plugin surround.vim , tetapi saya hanya ingin menggunakan Vim.
204
Bagaimana saya bisa dengan cepat mengutip / berhenti mengutip kata-kata dan mengubah kutipan (misalnya dari '
menjadi "
) di Vim? Saya tahu tentang plugin surround.vim , tetapi saya hanya ingin menggunakan Vim.
Jawaban:
surround.vim akan menjadi jawaban termudah Anda. Jika Anda benar-benar tidak ingin menggunakannya, berikut adalah beberapa contoh untuk apa yang dapat Anda lakukan. Belum tentu yang paling efisien, tapi itu sebabnya surround.vim ditulis.
ciw'Ctrl+r"'
ciw
- Hapus kata kursor aktif, dan berakhir dalam mode sisipkan.'
- tambahkan kutipan pertama.Ctrl+r"
- Masukkan isi"
register, alias tarik terakhir / hapus.'
- tambahkan kutipan penutup.di'hPl2x
di'
- Hapus kata yang dilampirkan oleh tanda kutip tunggal.hP
- Gerakkan kursor ke kiri satu tempat (di atas kutipan pembuka) dan letakkan teks yang baru saja dihapus sebelum kutipan.l
- Gerakkan kursor ke kanan satu tempat (di atas kutipan pembuka).2x
- Hapus dua kutipan.va':s/\%V'\%V/"/g
va'
- Pilih kata yang dikutip dan kutipan secara visual.:s/
- Mulai pengganti.\%V'\%V
- Hanya mencocokkan satu kutipan yang ada dalam wilayah yang dipilih secara visual./"/g
- Ganti mereka semua dengan tanda kutip ganda.sumber
ciw
dan tidak adilcw
? Saya menemukan yang pertama membingungkan dan yang kedua berfungsi dengan baik.ciw
bekerja di mana pun kursor Anda berada.cw
hanya berfungsi jika kursor Anda berada di awal kata. Lihat:help iw
..
perintah. Untuk membuatnya bekerja, gunakanciw' Ctrl+r Ctrl+p"
. Maka.
akan berperilaku seperti yang Anda inginkan untuk kata berikut: alih-alih mengingat konten register, ia akan ingat Anda ingin apa pun yang ada di register sekarang (agak sulit untuk dijelaskan, tetapi jika Anda mencoba keduanya, itu akan menjadi jelas :-))Lebih mudah bagi saya untuk melakukannya dengan cara ini
sumber
Berikut beberapa pemetaan yang dapat membantu:
Jika Anda belum mengubah variabel pemimpin map, maka aktifkan pemetaan dengan
\q"
\q'
atau\qd
. Mereka menambahkan kutipan ganda di sekitar kata di bawah kursor, kutipan tunggal di sekitar kata di bawah kursor, menghapus setiap kutipan di sekitar kata di bawah kursor masing-masing.sumber
map <Leader>' gewi'<Esc>A'<Esc>
ke.vimrc
file saya untuk memasukkan komentar kutipan tunggal dari posisi saat ini ke akhir baris; yang membantu saya saat mengonversi beberapa skrip MSDOS menjadi bash.:vnoremap <leader>q c""<esc>P
.Selain perintah lain, ini akan menyertakan semua kata dalam satu baris dalam tanda kutip ganda (sesuai komentar Anda)
atau jika Anda ingin mengurangi jumlah garis miring terbalik, Anda dapat menempatkan
\v
pengubah (sangat ajaib) di awal polasumber
:s/\v([a-Z]+)/"\1"/g
Cara makro!
tekan qdan quntuk merekam ke dalam register q (kami menggunakan "q" sebagai jalan pintas untuk mengingat "kutipan").
tekan shift+ bgerakkan kursor ke depan kata saat ini
itipe pers '(satu kutipan)
tekan esclalu tekan euntuk pindah ke akhir kata
tekan alalu tekan 'lagi untuk mengelilingi kata dengan tanda kutip.
tekan escuntuk masuk ke mode normal.
akhirnya tekan quntuk merekamnya menjadi
q
register.Cara Penggunaan
Anda dapat mengubah
step 4
dengan apa pun yang Anda suka {a line, word hingga menemukan beberapa karakter, dll}.Buat rekaman makro tetap ada
Simpan dan keluar
buka file Anda, buka beberapa kata
@q
jika Anda melakukannya dengan benar, hal-hal ajaib akan muncul dalam kata-kata Anda
Anda dapat melakukan langkah-langkah ini untuk makro lain yang Anda sukai.
sumber
@q w
dan kemudian Anda bisa membungkusn
kata-kata berikutnya dengan tanda kutip menggunakann@j
.Membungkus dengan tanda kutip tunggal (misalnya)
ciw'<C-r>"'<esc>
berfungsi, tetapi mengulang tidak akan berhasil. Mencoba:Ini menempatkan isi register default "secara harfiah". Sekarang Anda dapat menekan
.
kata apa saja untuk membungkusnya dengan tanda kutip. Untuk mempelajari lebih lanjut, lihat:h[elp] i_ctrl-r
dan lebih lanjut tentang objek teks di:h text-objects
Sumber: http://vimcasts.org/episodes/pasting-from-insert-mode/
sumber
ciw'<C-R><C-O>"'<Esc>
..
akan menulis ulang konten panggilan aktual terakhir.Untuk pengguna VSCodeVim dapat Anda lakukan
vwS"
"
dengan apa pun yang ingin Anda bungkus.w
dengan operator seleksi lainnyasumber
viwS'
yang membungkus kata dalam tanda kutip tunggal. Sejauh ini yang termudah.viwS"
Saya tidak tahu perintah builtin vim untuk ini, tetapi menggunakan
r"f'r"
untuk mengubah dari 'ke "danr'f"r'
untuk mengubah dari" menjadi' berfungsi jika Anda berdiri di atas yang pertama 'atau ". Perintah inir'
menggantikan karakter apa pun yang ada di bawah kursor Anda dengan', danf"
menggerakkan Anda maju ke depan ".sumber
'r
dan"r
), Anda bisa mengetik.
Dan jika Anda ingin mengubah lebih banyak kutipan,;
dan,
membawa Anda ke yang berikutnya atau sebelumnya karena mereka mengulangif/F/t/T
pencarian terakhir di arah yang sama atau berlawanan, masing-masing.Menambahkan Kutipan
Saya mulai menggunakan fungsi cepat dan kotor ini di
.vimrc
:Jadi sekarang, saya memilih secara visual apa pun yang saya inginkan (biasanya melalui
viw
- secara visual memilih kata dalam ) dalam tanda kutip dan tekan Quntuk tanda kutip ganda, atau tekan quntuk tanda kutip tunggal.Menghapus Kutipan
Saya menggunakan vim-textobj-quotes sehingga vim memperlakukan tanda kutip sebagai objek teks. Ini berarti saya bisa melakukan
vaq
(pilih secara visual di sekitar tanda kutip . Ini menemukan tanda kutip terdekat dan secara visual memilih mereka. (Ini opsional, Anda bisa melakukan sesuatu sepertif"vww
). Lalu saya tekans
untuk menghapus tanda kutip dari seleksi.Mengubah Kutipan
CIUMAN. Saya menghapus tanda kutip kemudian menambahkan tanda kutip . Misalnya, untuk menggantikan tanda kutip tunggal dengan tanda kutip ganda, saya akan melakukan langkah-langkah: 1. menghapus tanda kutip tunggal:
vaqs
, 2. menambahkan kutipan baru:vwQ
.sumber
Jika Anda menggunakan plugin vim https://github.com/tpope/vim-surround (atau menggunakan plugin VSCode Vim, yang dilengkapi dengan vim-surround pre-instal), ini cukup meyakinkan!
Menambahkan
penurunan
perubahan
Ia bahkan berfungsi untuk tag html!
lihat readme di github untuk contoh yang lebih baik
sumber
Berikut adalah beberapa pemetaan sederhana yang dapat digunakan untuk mengutip dan mengutip kata:
sumber
qw
qd
wq
VIM untuk vscode melakukannya dengan sangat buruk. Berbasiskan satu vim-surround jika Anda tidak menggunakan vscode.
sumber
Saya menggunakan nnoremap di .vimrc saya
Untuk mengutip satu kata:
Untuk menghapus tanda kutip (bekerja pada tanda kutip ganda juga):
Aturan untuk diingat: 'sq' = kutipan tunggal.
sumber
bagaimana dengan ini?
sumber
%
itu, itu akan berfungsi hanya pada baris saat ini kecuali Anda sudah memilih seluruh fileSaya menulis sebuah skrip yang melakukan ini:
Untuk menggunakannya, cukup sorot sesuatu, tekan control l, lalu ketikkan satu karakter. Jika itu salah satu karakter yang diketahui fungsi, itu akan memberikan karakter terminating yang benar. Jika tidak, itu akan menggunakan karakter yang sama untuk menyisipkan di kedua sisi.
Surround.vim dapat melakukan lebih dari ini, tetapi ini sudah cukup untuk kebutuhan saya.
sumber
Contoh peta mode visual untuk menambahkan tanda kutip tunggal di sekitar blok teks yang dipilih:
sumber