Buat mode baris perintah ketikkan <Esc> dan perintah Ctrl


11

Bayangkan Anda ingin mengutip kata di bawah ini. Jika |posisi kursor Anda dapat dengan mudah mengutip kata cw""<Esc>Pdari dari mode Normal.

|below

Saya ingin mencapai perilaku yang sama dalam mode Command-line. Pertanyaan saya adalah bagaimana saya bisa mengatakan ke mode Command-line bahwa saya ingin mengetikkan <Esc>. Saya mencoba :norm cw""<Esc>Pdan beberapa variasi lain tetapi saya hanya mendapatkan ""<Esc>Pbukan "below".

Masih terkait dengan ini, saya ingin tahu bagaimana saya bisa membuat jenis perintah Command-line mode Ctrl. Sebagai contoh, saya dapat mengutip kata tersebut di atas cw"<C-r>""<Esc>sebagai gantinya. Tapi kemudian saya akan perlu baris perintah untuk mengetik <C-r>untuk saya. Bagaimana saya bisa melakukan ini?


1
Sama seperti ada <C-x><C-e>di readline untuk mengedit baris perintah di $EDITOR, Anda harus <C-f>di Vim untuk membuka jendela baris perintah. Lihat :help cmdline-window.
— romainl

Jawaban:


11

<C-v>adalah apa yang kamu cari. Ini memungkinkan Anda untuk memasukkan karakter literal (mis., Literal Escalih-alih string "Esc") tanpa mengharuskan Anda melarikan diri dari apa pun.

:norm cw""<C-v><Esc>P

ditampilkan sebagai:

:norm cw""^[P

dan akan melakukan apa yang Anda inginkan (yaitu, kutip kata). Anda juga dapat menggunakan ini dengan <C-?>pemetaan lainnya . Misalnya, permintaan kedua Anda:

:norm cw"<C-v><C-r>""

ditampilkan sebagai:

:norm cw"^R""

Dan akan menghasilkan sama seperti di atas. Tidak perlu memasukkan ekstra Escdi akhir.


10

Ini karena kunci khusus seperti <Esc>tidak diterjemahkan dalam normalperintah, dan diperlakukan seperti Anda menekan <Esc>. Untuk memperbaiki ini, Anda dapat menggunakan execperintah. Seperti itu:

:exec "norm cw\"\"\<Esc>P"

Perhatikan bahwa Anda harus meletakkan garis miring terbalik sebelum tanda kutip dan <Esc>, dan menggunakan tanda kutip tunggal sebagai ganti tanda kutip ganda tidak akan berfungsi.


Apakah ini berfungsi untuk perintah Ctrl juga? Bagaimana saya harus menuliskannya dalam perintah?
— Gonçalo Ribeiro

Ya, itu seharusnya berhasil. Anda dapat menulisnya seperti ini:"\<C-{insert key}>"
— EvergreenTree

2

Mode baris perintah berbeda; Anda tidak dapat menggunakan perintah pengeditan (mode normal) yang sama di sana. Anda dapat menemukan daftar perintah di :help c_CTRL-V.

Sekarang, ada jendela baris perintah ( :help command-line-window), yang dapat dimasukkan melalui q:dari mode normal dan <C-F>dari baris perintah. Dalam bahwa jendela, Anda dapat menggunakan semua perintah normal dan pemetaan, sehingga akan menjadi pilihan 1.

Opsi 2 adalah pemetaan khusus untuk mode baris perintah. Seperti yang saya katakan, Anda tidak dapat menggunakan pendekatan via :normalet al. Kunci untuk mendefinisikannya adalah :help c_CTRL-\_epemetaan, yang "mengevaluasi [s] {expr} dan mengganti [s] seluruh baris perintah dengan hasilnya." Berikut adalah contoh sederhana yang hanya berfungsi dengan benar di akhir baris perintah:

:cnoremap <F1> <C-\>esubstitute(getcmdline(), '\w\+$', '"&"', '')<CR>

1
Saya tidak berpikir OP dimaksudkan untuk membuat pemetaan untuk baris perintah, tetapi untuk melakukan pemetaan dari baris perintah.
— EvergreenTree
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.