Memetakan Ctrl + s tidak berfungsi

9

Saya mencoba memetakan Ctrl+ suntuk menyimpan file saya namun tidak berfungsi.

Pemetaan saya:

map <C-s> :w <CR> :echo "Saved" <CR>
imap <C-s> <Esc> :w <CR> :echo "Saved" <CR> i

Ketika dalam mode insert saya melihat /:echo "Saved"di sudut bawah dan bukannya saveddan ketika saya dalam mode normal saya melihat hal yang sama. Apa yang saya lakukan salah?

Ini di bagian paling atas dari vimrc saya jadi kode saya yang lain tidak boleh menyebabkan masalah. Saya menjalankan Vim di dalam Terminal OSX.

iProgram
sumber
Apakah Anda menggunakan Vim dari terminal? Control + S juga merupakan keybind khusus yang diambil oleh terminal yang berarti "hentikan output" ... Ketika saya mencoba 2 keybind di atas dari gVim, sepertinya berfungsi.
Martin Tournoij
' I am also running vim inside the Mac terminal.' Ya saya menjalankan vim melalui terminal. Apakah lebih baik menggunakan Alt daripada Ctrl atau Cmd?
iProgram
Ngomong-ngomong,
Untuk mengikat save ke Cmd-S di OSX Anda dapat mencoba memetakan dari <D-s>walaupun saya tidak yakin apakah itu berfungsi di terminal Vim, dan itu sudah merupakan default di MacVim!
joeytwiddle

Jawaban:

7

Untuk memastikan solusi ini berjalan bahkan ketika Vim dijalankan oleh alat terpisah (seperti git), saya memilikinya di ~/.vimrc:

" Allow us to use Ctrl-s and Ctrl-q as keybinds
silent !stty -ixon

" Restore default behaviour when leaving Vim.
autocmd VimLeave * silent !stty ixon

Ini telah bekerja untuk saya di Linux, GVim, Mac OS X dan MacVim.

Peringatan:

  • Pada Windows, atau OS lain yang tidak memiliki sttyperintah, yang di atas kemungkinan akan memunculkan kesalahan setiap kali Vim dimulai! ( silent!mungkin membisukan itu.)

  • Jika shell Anda sudah menonaktifkan pengaturan TTY ini, tentu saja perintah otomatis VimLeaveakan menyalakannya lagi! Mendeteksi dan memulihkan pengaturan saat ini merupakan keuntungan dengan pendekatan @ aPyDeveloper.


Kombinasi dari solusi ini dan @ aPyDeveloper, yang menangani masalah kompatibilitas di bawah OS X dan Windows, akan bagus untuk diposkan di sini dan / atau di Wiki!

Untuk menghindari memilih antara stty -gdan stty --save, Anda dapat mencoba tes berikut hanya untuk ixopsi.

call system("stty -a | grep '\( \|^\)ixon\>' >/dev/null")
let g:ix_at_startup = (v:shell_error == 0)
joeytwiddle
sumber
2

Terima kasih kepada @Carpetsmoker untuk tautannya.

Menambahkan skrip ini bash_profileberhasil bagi saya.

vim()
{
    # osx users, use stty -g
    local STTYOPTS="$(stty --save)"
    stty stop '' -ixoff
    command vim "$@"
    stty "$STTYOPTS"
}

Berikut ini adalah link untuk itu. http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

Saya juga harus menghapus spasi sebelum:

iProgram
sumber