Apakah mungkin untuk memasukkan jeda baris di mana kursor berada di Vim tanpa masuk ke mode penyisipan? Berikut contohnya ( [x]
artinya kursor aktif x
):
if (some_condition) {[ ]return; }
Kadang-kadang, saya mungkin ingin memasukkan beberapa kode lagi. Jadi saya akan menekan iuntuk masuk ke mode sisip, tekan Enteruntuk memasukkan jeda baris dan kemudian menghapus spasi ekstra. Selanjutnya, saya akan masuk ke mode normal dan memposisikan kursor sebelum tanda kurung tutup dan kemudian melakukan hal yang sama untuk mendapatkannya di barisnya sendiri.
Saya sudah melakukan ini beberapa lama, tetapi pasti ada cara yang lebih baik untuk melakukannya?
vim
performance
text-editor
Mark A. Nicolosi
sumber
sumber
Jawaban:
Untuk contoh yang Anda berikan, Anda dapat menggunakan rEnteruntuk mengganti satu karakter (spasi) dengan Enter. Kemudian, fspace.untuk maju ke ruang berikutnya dan ulangi perintah terakhir.
Bergantung pada pengaturan autoindent Anda, di atas mungkin atau mungkin tidak indentasi pernyataan return dengan benar. Jika tidak, gunakan sEnterTabEscsebagai gantinya untuk mengganti spasi dengan baris baru, membuat indentasi baris, dan keluar dari mode penyisipan. Anda harus mengganti spasi kedua dengan perintah yang berbeda sehingga Anda tidak dapat menggunakan '.' pada kasus ini.
sumber
>>
dan<<
untuk membantu membuat indentasi jika Anda tidak ingin masuk ke mode penyisipans
.Berikut cara membuat makro yang menyisipkan baris baru di kursor setiap kali Anda menekan 'g' saat tidak dalam mode penyisipan:
Dari dalam vim, ketik:
Dimana:
Anda akan melihat yang berikut ini di bagian bawah jendela vim Anda sampai Anda menekan Enter terakhir:
Penjelasan:
[Ctrl + V] berarti "kutip karakter berikut" - ini memungkinkan Anda untuk menyematkan baris baru dan keluar dari karakter dalam perintah.
Jadi Anda memetakan kunci 'g' ke urutan:
Ini adalah vim untuk menyisipkan baris baru sebelum kursor, lalu keluar dari mode penyisipan .
Tweaks:
f}i^M^[O
- ini akan f ind } dan saya nsert baris baru yang lain, lalu melarikan diri dari modus insert dan O pen baris kosong bagi Anda untuk memasukkan kode lebih.Nikmati!
sumber
Pemetaan sederhana untuk memutus garis di kursor dengan menekan Ctrl + Enter:
pada dasarnya memasuki mode 'sisipkan', menyisipkan jeda baris dan kembali ke mode normal.
letakkan di file .vimrc Anda untuk digunakan di masa mendatang.
sumber
Jika Anda biasanya memperluas blok satu baris menjadi tiga baris, cobalah substitusi. Ubah braket pembuka menjadi braket / braket penutup, dan braket penutup menjadi braket kembali / braket.
Perintah untuk mengganti braket / pengembalian braket terlihat seperti ini:
Karena Anda ingin sering menggunakannya, Anda dapat memetakan urutan lengkap ke penekanan tombol yang tidak digunakan seperti ini:
Di mana Anda melihat ^ M dalam urutan, ketik [Ctrl-V] , lalu tekan enter .
Sekarang dengan kursor Anda di mana saja pada baris sampel Anda, tekan tombol yang dipetakan, dan carriage return ditambahkan.
Periksa
:help map-which-keys
saran tentang memilih penekanan tombol yang tidak digunakan untuk dipetakan.sumber
g
tidak dipetakan karena digunakan sebagai kunci 'namespace' untuk banyak pemetaan vim yang terdiri dari dua penekanan tombol (lihat:h g
). Jadi pemetaan ini sebenarnya tidak boleh dilakukan.g
sudah digunakan sebagai kunci 'namespace'?:help g
adalah salah satu cara untuk melihat daftarg
pemetaan + sesuatu default .z
,[
]
adalah kunci 'namespace' lebih lanjut, lihat mis:help index
. Anda dapat meminta:verbose map g
untuk melihat semua pemetaan yang ditentukan saat ini yang dimulai dengan g. Sumber daya web yang berguna adalah viemu.com/vi-vim-cheat-sheet.gif , vimcasts.org/blog/2014/02/follow-my-leader , vimeo.com/85343734 (slide: speakerdeck.com/nelstrom/follow-my -leader )Dengan asumsi Anda baik-baik saja dengan memetakan
K
ke sesuatu yang lain (pilih kunci lain yang Anda sukai), dan menggunakan penanda'
sebagai penanda sementara tidak masalah mengapa tidak melakukan ini?sekarang menekan K dalam mode normal di atas karakter yang Anda inginkan agar pemutusan baris terjadi akan memisahkan garis dan meninggalkan kursor di tempatnya.
sumber
Vim secara otomatis akan mematikan spasi kosong di sebelah kanan kursor jika Anda memutus baris dalam dua saat
autoindent
(atau bantuan indentasi lainnya) diaktifkan.Jika Anda tidak ingin menggunakan pengaturan tersebut, gunakan
s
bukani
untuk s ubstitute teks baru untuk kosong daripada hanya memasukkan. (Jika ada beberapa tempat kosong, letakkan kursor di paling kiri dan gunakancw
sebagai gantinya.)sumber
Pada dasarnya, saat Anda membagi garis, Anda hanya ingin memasukkan carriage return, atau jika Anda berada di spasi, gantilah dengan carriage return. Nah, mengapa puas dengan satu atau yang lain? Inilah pemetaan saya untuk K:
Saya menggunakan operator terner untuk menyingkat dua tindakan menjadi satu peta utama. Memecahnya,
<expr>
berarti keluaran peta kunci bisa dinamis dan dalam hal ini bergantung pada kondisigetline('.')[col('.')-1]==' '
yang merupakan cara bertele-tele untuk menanyakan vim apakah karakter di bawah kursor adalah spasi. Terakhir, operator terner yang sudah dikenal? :
mengganti spasi dengan linebreak (r<CR>
) atau menyisipkan yang baru (i<CR><Esc>
)Sekarang Anda memiliki peta kunci adik yang bagus untuk
J
perintah.sumber
Setel pemetaan kunci ini di vimrc Anda
Kemudian tekan Ctrl + m jika Anda ingin menggunakannya di vim Anda.
sumber
IMHO, pemetaan bawaan
gs
bukanlah pemetaan yang berguna (alihkan vim ke mode tidur), orang dapat menggunakan ini untuk pemisahan:sumber
Di Vrapper Anda dapat menggunakan gql yang akan membagi baris tanpa memasuki mode penyisipan, tetapi mungkin tidak selalu mempertahankan indentasi.
sumber
Sebenarnya Anda membutuhkan operasi gabungan berikut:
:
untuk masuk dalam Mode Perintahs/\s/\r/g
sumber
Jika Anda memiliki masukan:
dan ingin menghasilkan
Anda bisa menggunakan perintah
sumber
Saya menemukan ini sebagai implementasi paling tepat dari apa yang saya harapkan dari perilaku yang berlawanan
J
Itu melakukan baris baru yang sederhana pada kursor, menangani spasi kosong apa pun pada baris sebelumnya jika ada, dan kemudian mengembalikan kursor ke posisi yang benar.
i <cr> <esc> - ini adalah salah satu solusi paling umum yang disarankan, tidak menghapus karakter non-spasi di bawah kursor Anda tetapi juga meninggalkan Anda dengan spasi kosong
^mw - Goto start dari baris baru dan buat tanda di bawah
w
gk - naik satu baris
:silent! s/\v +$//<cr> - regex mengganti spasi kosong di akhir baris
:noh<cr> - Hapus penelusuran apa pun yang menyorot bahwa regex mungkin telah diaktifkan
`w - kembalikan tanda di bawah
w
Pada dasarnya menggabungkan yang terbaik dari keduanya r<esc><cr>dani<cr><esc>
Catatan: Saya memiliki ikatan ini Syang berpotensi menimpa kunci yang berguna tetapi ini adalah sinonim untuk ccdan karena saya tidak menggunakannya sesering yang saya lakukan perpecahan, saya baik-baik saja dengan menimpanya.
sumber
o
ESC
perintah akan melakukannya untuk Anda.sumber
Pemetaan ini akan memecah fungsi satu baris yang Anda miliki. Cukup letakkan kursor Anda di baris dan tekan 'g' dalam mode normal:
Ini mengasumsikan bahwa Anda memiliki spasi setelah kurung kurawal buka dan spasi sebelum kurung kurawal tutup. Lihat apakah itu berhasil untuk Anda.
sumber