Mapear Ctrl + s não funciona


9

Estou tentando mapear Ctrl+ spara salvar meu arquivo, mas ele não funciona.

Meus mapeamentos:

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

Quando no modo de inserção, vejo /:echo "Saved"no canto inferior, em vez de, savede quando estou no modo normal, vejo a mesma coisa. O que estou fazendo errado?

Isso está no topo do meu vimrc, portanto meu outro código não deve estar causando um problema. Estou executando o Vim dentro do OSX Terminal.


Você está usando o Vim de um terminal? Control + S também é um atalho de teclado especial captado pelo terminal, que significa "parar a saída" ... Quando tento os 2 atalhos de teclado acima do gVim, ele parece funcionar.
Martin Tournoij 7/03

' I am also running vim inside the Mac terminal.' Sim, estou executando o vim via terminal. Seria melhor usar Alt em vez de Ctrl ou Cmd?
IProgram 7/03/15

Esta pergunta foi feita muitas vezes , pela maneira ;-) Eu não tenho tempo para escrever uma resposta, mas que apontam deve ajudá-lo ...
Martin Tournoij

Para vincular o save ao Cmd-S no OSX, você pode tentar mapear, <D-s>embora não tenha certeza se isso funciona no terminal Vim, e já é um padrão no MacVim!
precisa saber é o seguinte

Respostas:


7

Para garantir que essa solução alternativa seja executada mesmo quando o Vim é iniciado por uma ferramenta separada (como o git), eu tenho isso no meu ~/.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

Isso tem funcionado para mim no Linux, GVim, Mac OS X e MacVim.

Ressalvas:

  • No Windows ou em qualquer outro sistema operacional sem o sttycomando, o acima provavelmente gerará erros toda vez que o Vim for iniciado! ( silent!pode silenciar isso.)

  • Se o seu shell já tinha essa configuração TTY desativada, é claro que o VimLeavecomando automático o ativará novamente! Detectar e restaurar as configurações atuais é uma vantagem com a abordagem do @ aPyDeveloper.


Uma combinação dessa solução com a @ aPyDeveloper, que lida com questões de compatibilidade no OS X e Windows, seria ótima para publicar aqui e / ou no Wiki!

Para evitar escolher entre stty -ge stty --save, você pode tentar o seguinte teste apenas para a ixopção.

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.