La mappatura di Ctrl + s non funziona


9

Sto provando a mappare Ctrl+ sper salvare il mio file ma non funziona.

Le mie mappature:

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

Quando in modalità inserimento vedo /:echo "Saved"nell'angolo in basso invece savedche in modalità normale e vedo la stessa cosa. Che cosa sto facendo di sbagliato?

Questo è in cima al mio vimrc, quindi l'altro mio codice non dovrebbe causare problemi. Sto eseguendo Vim all'interno del Terminale OSX.


Stai usando Vim da un terminale? Control + S è anche uno speciale keybind prelevato dal terminale che significa "stop output" ... Quando provo i 2 keybind precedenti di gVim, sembra funzionare.
Martin Tournoij,

' I am also running vim inside the Mac terminal.' Sì, sto eseguendo VIM tramite terminale. Sarebbe meglio usare Alt invece di Ctrl o Cmd?
iProgram

A proposito, questa domanda è stata posta molte volte ;-) Non ho tempo di scrivere una risposta, ma quel link dovrebbe aiutarti ...
Martin Tournoij

Per associare il salvataggio a Cmd-S su OSX potresti provare a mappare <D-s>anche se non sono sicuro che funzioni nel terminale Vim, ed è comunque già predefinito in MacVim!
joeytwiddle,

Risposte:


7

Per garantire che questa soluzione alternativa venga eseguita anche quando Vim viene avviato da uno strumento separato (come git), ho questo nel mio ~/.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

Questo ha funzionato per me su Linux, GVim, Mac OS X e MacVim.

Avvertenze:

  • Su Windows o su qualsiasi altro sistema operativo privo del sttycomando, è probabile che quanto sopra genererà errori ogni volta che si avvia Vim! ( silent!potrebbe disattivarlo).

  • Se la tua shell ha già disabilitato questa impostazione TTY, ovviamente il VimLeavecomando automatico lo riattiverà di nuovo! Rilevare e ripristinare le impostazioni correnti è un vantaggio con l'approccio di @ aPyDeveloper.


Una combinazione di questa e la soluzione di @ aPyDeveloper, che gestisce i problemi di compatibilità con OS X e Windows, sarebbe ottima per pubblicare qui e / o sul Wiki!

Per evitare di scegliere tra stty -ge stty --save, puoi provare il seguente test solo per l' ixopzione.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.