Menggunakan vim saat menekan tanda kurung buka dan tutup kurung / kurung / dll


8

Ketika saya belajar memprogram, saya akan menekan kurung buka dan tutup / etc lalu tombol panah kiri kemudian masukkan teks. Jadi untuk dimasukkan, [hello]saya akan mengetik [], dan kemudian panah kiri sehingga lebih dari braket pertama ( [).

Saya suka itu karena saya tahu saya selalu memiliki jumlah tanda kurung / etc yang tepat dan sebaliknya saya merasa tangan saya harus bergerak maju dan mundur ke braket / kunci dll

Tetapi, dengan tetap berpegang pada pola pikir Vim, saya tidak ingin terus-menerus meraih tombol panah. Apakah ada yang bisa saya lakukan yang tidak melibatkan menggunakan tombol panah atau harus terus-menerus beralih dari mode insert untuk hanya menekan hdan masuk kembali?

Jawaban:


5

Anda mungkin mencari plugin pasangan otomatis :

Saat Anda mengetik karakter seperti {, (atau [plugin ini akan secara otomatis menambahkan karakter simetri dan mengganti kursor Anda dalam mode sisipkan di antara dua tanda kurung. Itu juga bisa menjadi "pintar" sambil menghapus karakter-karakter itu.

Juga jika saya dapat memberi Anda saran, lupakan tombol panah . Apa pun yang ingin Anda lakukan, selalu ada gerakan yang lebih cepat diakses tanpa memindahkan tangan Anda dari barisan rumah. Mungkin perlu beberapa waktu untuk membiasakan diri, tetapi begitu kebiasaan Anda bahkan tidak akan kehilangan mereka.


Terima kasih atas komentarnya dan, jika Anda tidak keberatan saya bertanya; Anda mengetik "[" lalu "halo" lalu "]". Tanpa plugin surround (yang sepertinya merupakan ide bagus, terima kasih) sepertinya agak rumit untuk bolak-balik bahkan tanpa masalah berpotensi kehilangan jumlah kurung yang tepat
JZL003

Yah sebenarnya saya selalu menggunakan baik auto-pasangan atau surround.vim (lihat jawaban dari Peter) tetapi jika saya harus melakukannya tanpa plug-in, saya akan melakukan [, ] , <Esc>(yang akan menempatkan kursor pada ] ) dan akhirnya iyang akan letakkan kursor di antara kurung dalam mode sisipkan.
statox

@statox ketika dalam mode penyisipan, bagaimana Anda memindahkan dua posisi kursor ke kiri? Dengan ctrl-o 2h? Apakah ini lebih cepat daripada menggerakkan tangan Anda ke kursor? ;)
Vitor

@Vitor Nope saya akan menekan tombol Esc untuk pergi ke mode normal, untuk pergerakan kurang dari 3 karakter saya mungkin akan menekan beberapa kali hatau jdan kalau tidak saya akan menggunakan gerakan lain. Rasanya lebih cepat untuk saya, tapi saya memahami bahwa beberapa orang merasa itu dengan cara yang berbeda :)
statox

@statox setelah 10 tahun menggunakan vim, saya masih berjuang untuk menggunakan hjkl dan khususnya dalam skenario ini saya baru saja dijelaskan. Terima kasih atas komentar Anda! :)
Vitor

8

Ada banyak "pasang" plugin yang melakukan ini untuk Anda secara otomatis. Namun semuanya menggosok saya dengan cara yang salah. Saya cenderung menggunakan plugin surround.vim Tim Pope . Saya melakukan hal berikut: <c-s>]dalam mode memasukkan untuk memasukkan []dengan kursor di tengah kurung.


lebih banyak orang perlu tahu tentang ini, vim surround lebih berguna daripada hanya membungkus barang. Juga, saya merasakan pasangan pasang malaise, sangat agresif dan akhirnya membuang penekanan tombol ke format
rgalbo

4

Jika Anda hanya perlu memindahkan satu spasi, ctrl-odalam mode sisipkan membuat input Anda berikutnya menjadi perintah normal, jadi ctrl-o, hakan pindah satu. Modeline akan ditampilkan --- (insert) ---sampai Anda memasukkan perintah normal.


2

lh-brackets menyediakan pemetaan mode insert dan normal untuk memasukkan sepasang bracket.

Catatan:

  • Menambahkan pasangan braket baru cukup mudah.
  • Pemetaan mode penyisipan peka konteks - yaitu tidak diperluas dalam konteks string atau komentar, ...
  • Tidak seperti plugin surround, pemetaan sekitarnya adalah intuitif, tetapi tidak dalam gaya vim. yaitu memukul (dalam mode visual akan mengelilingi (secara default), kita tidak perlu menekan si(atau urutan yang sama.

2

Jawaban sebelumnya sangat bagus. Tapi saya pikir Anda mungkin menginginkan sesuatu yang lebih mudah. Secara pribadi saya gunakan h j k luntuk bergerak. Oleh karena itu, saya telah menambahkan .vimrc saya sebagai berikut:

inoremap <c-j> <esc>ji
inoremap <c-k> <esc>ki
inoremap <c-h> <esc>i
inoremap <c-l> <esc>2li

Hanya tip kecil. Anda mengatakan bahwa prosedur Anda i, [], <Esc>hi.

Ada Operator-Tertunda pemetaan, Yang berarti Anda bisa ci[atau di[atau ii[.


1

Saya pribadi bukan penggemar berat penyisipan karakter otomatis; Anda dapat dengan mudah menentukan satu set pemetaan untuk menyisipkan teks & lebih banyak kursor ke tempat yang Anda inginkan:

" Add brackets with closing bracket
inoremap <C-a>[ []<Left>
inoremap <C-a>( ()<Left>

" For C & C-like languages
inoremap <C-a>{ {<Cr><Cr>}<Up>

" For Ruby
inoremap <C-a>def def<Cr>end<Up>

Perhatikan bahwa plugin seperti ultisnips juga melakukan hal-hal seperti ini, tetapi lebih maju. Misalnya dalam Javascript saya bisa mengetik:

if<Tab>hello

dan saya mendapatkan:

if (hello) {

}

Anda dapat menambahkan cuplikan sederhana untuk melengkapi tanda kurung; ini adalah file .snippet khusus yang ada di ~/.vim/UltiSnips/all.snippets:

snippet (
(${0})
endsnippet

snippet [
[${0}]
endsnippet

snippet {
{
${0}
}
endsnippet

${0} adalah posisi kursor.

lihat :help UltiSnips-adding-snippetsuntuk informasi lebih lanjut.

Perhatikan bahwa ultisnips membutuhkan Python; Plugin lain yang terkenal adalah vim-snipmate . Vim Wiki memiliki daftar lengkap plugin potongan .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.