Mengapa pemetaan kunci nnoremap <SCk>: w <CR> tidak berfungsi?

8

Saya mencoba membuatnya sehingga saya dapat menulis buffer ke disk dengan satu keystroke.

(Catatan: idealnya, saya ingin ini bekerja di semua mode, tetapi untuk saat ini sebagai awal saya hanya mencoba membuatnya bekerja dalam mode normal. )

Di Vim wiki tertulis ...

Mendukung Vim mewakili karakter kontrol menggunakan notasi simbolik seperti <F1>, <C-W>, <C-S-F1>, dll

Dan juga...

Kunci dengan Ctrlpengubah kunci diwakili menggunakan <C-key>notasi. Misalnya Ctrl-Rdiwakili menggunakan <C-R>. Kunci dengan pengubah tombol Shift diwakili menggunakan <S-key>notasi. Misalnya Shift-F2diwakili menggunakan <S-F2>. Kunci dengan Altpengubah kunci diwakili menggunakan <A-key>atau <M-key>notasi. Anda dapat menggabungkan satu atau lebih pengubah kunci. Misalnya, untuk mewakili Ctrl+Shift+F3Anda dapat menggunakan <C-S-F3>.

Itu tampaknya mengatakan bahwa jika saya memasukkan ini ke dalam saya .vimrcitu harus bekerja ...

 nnoremap <S-C-k> :w<CR>

Tapi itu tidak berpengaruh. Ketika saya memuat ulang .vimrcdan menekan shift+ control+ Ktidak ada [File] writtenpesan muncul di area bawah.

Saya juga mencoba yang satu ini tetapi option+ Ktidak berpengaruh ...

 nnoremap <M-k> :w<CR>

Tidak ada pesan kesalahan.

Saya menggunakan OS X.


MEMPERBARUI

Ok saya baru mencoba ini ...

inoremap <M-s> Hey whats up

Lalu ketika saya masuk ke mode insert dan tekan option+ S, keluaran Vim ...

ß

Apakah OS X menyadap penekanan tombol saya sebelum Vim menerimanya? Apakah itu sebabnya ini tidak berhasil?

Jika demikian, adakah cara untuk menghentikannya selain membeli komputer lain?

Ethan
sumber
5
Perhatikan bahwa pemetaan kunci Control + Shift + terpisah dari tombol Control + tidak berfungsi. Lihat: Dapatkah saya memetakan huruf Ctrl + huruf besar secara terpisah dari Ctrl + huruf kecil? (Kunci seperti F1 adalah kasus khusus). Yang sedang berkata, pemetaan tampak baik-baik saja. Vim mana yang digunakan? MacVim?
Martin Tournoij
Ok, terima kasih sudah memberi tahu saya. Saya akan mencoba menggunakan <M>sebagai gantinya <S-C>. Saya tidak menggunakan MacVim. Saya menggunakan Vim 7.4.1129 biasa yang diinstal melalui MacPorts.
Ethan
4
OS X akan menafsirkan Opsi-S sebagai ß. Untuk memetakannya di Vim, Anda perlu melakukannya :inoremap ß Hey whats up.
Amadan
1
<S-C-k>adalah tiga penekanan tombol. Katakan saja.
Antony

Jawaban:

1

Respons keyboard Anda dapat berbeda dari yang Anda harapkan. Misalnya, dapat memberikan beberapa karakter khusus bahasa Anda.

Untuk memeriksa apa yang dilakukan sistem Anda dengan menekan kombinasi apa pun:

ctrl+vdalam mode sisipkan lalu option+kataualt+k

Gunakan simbol output dalam pemetaan vimrc Anda <M-k>

PERINGATAN: metode ini kasar - simbol tergantung pada sistem, terminal dll. Jadi, Anda harus memasukkan .vimrc Anda seperti:

if has("gui_running")
    if has("x11")
        <map_command_here>
    if has("gui_gtk2")
        <map_command_here>

atau untuk mendeteksi sistem (OS X) seperti di sini

Mesco
sumber
0

Ubah ke <C-S-k>. Ini bekerja dengan baik untuk saya. Anda dapat memberikan beberapa kunci lain juga, seperti <F10>untuk:wq!

:map <F10> :wq!<CR>
SibiCoder
sumber
SCk juga berfungsi untuk saya dalam mode nnoremap.
SibiCoder
OS dan terminal apa?
Tom Hale
Linux dan vim 7.2
SibiCoder