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.

iProgram
fonte
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)
joeytwiddle
fonte
2

Obrigado a @Carpetsmoker pelos links.

Adicionar este script bash_profilefuncionou para mim.

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

Aqui está um link para ele. http://vim.wikia.com/wiki/Map_Ctrl-S_to_save_current_or_new_files

Eu também tive que remover o espaço antes do:

iProgram
fonte