Masukkan Karakter Tunggal di Vim?

25

Di Vim (7.2), ada perintah mode normal runtuk mengganti satu karakter dengan yang lain. Misalnya, mengetik rXakan menggantikan satu karakter di bawah kursor dengan Xdan kemudian mengembalikan Anda ke mode normal.

Apakah ada perintah mode normal untuk memasukkan satu karakter dan kemudian kembali ke mode normal?

John Dibling
sumber
1
Kemungkinan duplikat lintas situs: stackoverflow.com/questions/1557893/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Lihat vim.wikia.com/wiki/Insert_a_single_character untuk solusi komprehensif.
Maxim Suslov

Jawaban:

6

MelBurslan benar bahwa fitur ini tidak ada secara asli, tetapi membuat perintah yang ditentukan pengguna tidak benar-benar cara untuk membuatnya. Saya bermain-main selama beberapa menit dan membuat ini:

:nmap <silent> ,s "=nr2char(getchar())<cr>P

Yang menggunakan beberapa tipuan Vim yang melibatkan "menempatkan" teks dari register, dalam hal ini register "ekspresi". Ekspresi yang dicolokkan ke register adalah " nr2char(getchar())" yang akan mengembalikan string karakter tunggal.

Alasan saya membangun pemetaan dengan cara ini adalah karena mendapatkan input pengguna "di tengah jalan" pemetaan itu rumit dan dapat berperilaku tak terduga; bahkan pemetaan ini akan menurunkan kursor ke area status sambil menunggu pengguna mengetik karakter.

Heptite
sumber
8

Terima kasih kepada Johnny karena telah memberi kami jawaban luar biasa ini di komentar di bawah:

":nmap <C-i> i_<Esc>r"

Itu memetakan Control + i untuk memasukkan satu karakter, dan itu melakukannya dengan sangat singkat.

Di file vimrc Anda, ini akan terlihat seperti:

nnoremap <C-i> i_<Esc>r

Saya mengubah pemetaan saya untuk menggunakan ruang, dan Anda dapat mengubah milik Anda ke kunci pilihan Anda:

nnoremap <Space> i_<Esc>r
Matt C
sumber
1
Ini adalah jawaban yang paling ringkas dan sederhana.
Dylanthepiguy
4

Sejauh yang saya tahu, tidak ada fungsi seperti itu dalam inkarnasi vi editor yang didistribusikan secara luas tetapi, vim memiliki fasilitas untuk membuat perintah khusus. Sebelumnya telah dibahas di sini: di utas ini

Anda mungkin dapat membuat perintah khusus Anda melakukan apa yang ingin Anda lakukan.

MelBurslan
sumber
3
Inilah perintah untuk memetakan Ctrl-I untuk menyisipkan satu karakter: ": nmap <Ci> i_ <esc> r"
Johnny
2

Cara sederhana untuk melakukan ini adalah menggunakan perintah Cut xand Put p. Katakan itu *adalah karakter yang ingin Anda masukkan. Masukkan menggunakan i * Esc. Lalu pukul x. Itu akan memotong karakter. Sekarang, Anda dapat menekan puntuk meletakkan karakter tunggal. Jika Anda harus memasukkan karakter yang 300 kali, Anda dapat mengetik: 300p.

Steve Bragg
sumber