Remapear a tecla Esc no Vim

12

É possível remapear a Escchave para outra chave no Vim? Quando uso o Vim em uma janela de console do VMware vSphere web client em tela cheia e pressiono a Esctecla para sair do modo de edição, ele também me tira do modo de tela inteira na janela do console.

Estou usando o Vim que vem do repositório RHEL YUM. (RHEL 7.5; Vim 7.4).

Beam Davis
fonte
2
Faça o que fizer, não mapeie esc para outra coisa. Mapeie outra coisa para esc.
D. Ben Knoble

Respostas:

11

Geralmente, C-[também é uma maneira de sair do modo de inserção. Algumas pessoas gostam de mapear jjno modo de inserção como uma maneira de sair e retornar ao modo normal. Pessoalmente, prefiro jhque meus dedos deslizem melhor com isso e não forço muito o dedo médio.

De algum lugar nas minhas configurações de neovim:

inoremap jh <Esc>

Isso remapeia jhpara escapar no modo de inserção.

É isto o que você queria?

Amir Eldor
fonte
3
Ctrl- [é o mesmo que 'ESC'
Herb Wolfe
Eu brinquei e também descobri que isso funciona: ": inoremap <F1> <Esc>". Isso mapeia a tecla F1 no lugar da tecla Esc. Isso pode ser reduzido para ": ino <F1> <Esc>".
Davis
Além disso, as letras maiúsculas não são necessárias.
Davis
Sim, maiúsculas não são necessárias e 'ino' é mais curto para escrever, mas nas minhas configurações eu prefiro brevidade do que atalhos legais. Estou feliz por ter ajudado!
Amir Eldor
Enquanto a brevidade é legal e tudo mais ... é a alma da inteligência, afinal ... Acho que você quis dizer outra coisa. Clareza? Verbosidade? Não concisão? ;)
B Camada
8

TL; DR

É realmente bom remapear escpara a linha de casa. Aqui está como você decide o que mapeá-lo: Escolha uma mão e role os quatro dedos pela área de trabalho o mais rápido possível na direção que for mais rápida. Use isso para escolher quais chaves remapear.

Para mim, é mais natural passar do mindinho para o dedo indicador. Portanto, eu escolhi usar kj. Além disso, fiz um grep -rHin kj ~/srcgrep recursivo no diretório pai de todo o meu código-fonte e não encontrei correspondências.

" esc in insert mode
inoremap kj <esc>

" esc in command mode
cnoremap kj <C-C>
" Note: In command mode mappings to esc run the command for some odd
" historical vi compatibility reason. We use the alternate method of
" existing which is Ctrl-C

Nota: Se você precisar digitar um literal kj(ou qualquer que seja o seu mapeamento), digite-o com 2 segundos no meio. (Você verá que o cursor hesita em mover-se após o 1º caractere. Espere que ele se mova antes de digitar o 2º.)


Eu uso vimhá 19 anos. Fiquei horrorizado quando a Apple atualizou seus MacBook Pros para ter uma barra de toque e nenhuma escchave física . Eu vi um post que sugeriu o mapeamento jje jkpara <Esc>e odiado. Mas eu pacientemente anotei em um cartão toda vez que isso me irritava. Cerca de 15 minutos depois, revisei minhas anotações e criei o TL; DR acima para abordar o seguinte:

  1. escCostumo acertar allot quando não estou no modo de inserção apenas para "ter certeza" e jjme solta duas linhas.
  2. jké um no-op (baixo, cima), mas kjé mais natural para as minhas mãos.
  3. Também preciso usar escpara sair do modo de comando sem concluir o comando.

É minha esperança que eu possa finalmente quebrar meu hábito de bater escem outros aplicativos e fechar janelas quando eu escrever vários minutos. Prefiro inserir caracteres kj dispersos do que perder meu trabalho!

Bruno Bronosky
fonte
1
Observe que, para o seu cnoremap, quando o esc vier de um mapeamento, ele executará o comando, em vez de abortá-lo. Isso ocorre por razões de compatibilidade com vi
Christian Brabandt
Nos modos de inserção e comando, esc ainda funciona. Mas você também tem essa combinação alternativa de linha inicial que também usa. Talvez eu não tenha seguido o seu ponto.
Bruno Bronosky
2
o ponto é, para o modo de comando, uma fuga que vem do mapeamento não interrompe o comando, mas executa-o. Tente:ls kj
Christian Brabandt
@ChristianBrabandt você está correto. O que pode ser feito sobre isso? Ou pelo menos, onde isso está documentado? Não consigo nem encontrar termos de pesquisa decentes para encontrar algo sobre isso.
Bruno Bronosky
1
Não me lembro se isso está sendo documentado. Tropecei sobre esse comportamento há vários anos. Ah, está meio que documentado em :h c_Esc: Nas macros, [...] inicie o comando digitado. (Macros normalmente também incluem mapeamentos)
Christian Brabandt