Como mapear chaves no Vim

Como Mapear Chaves No Vim



No Vim, mapeamento de teclas é um processo de atribuição de um conjunto de chaves ou comandos a uma chave específica para executar uma tarefa específica. Por exemplo, para selecionar todas as linhas do arquivo você usa o ggVG comando, e você tem que pressionar quatro teclas para fazer isso. Que tal fazer isso com apenas um toque de tecla? É aqui que o mapeamento de teclas do Vim se torna útil. O mapeamento de teclas é uma forma de automatizar muitas tarefas executadas com frequência no Vim. E você deve ter ouvido falar disso; se você estiver fazendo algo mais de duas vezes, automatize-o!

Neste guia completo, explicarei como mapear as chaves no Vim para automatizar as operações. Desde a criação de um mapa de teclas básico até o mapeamento de teclas avançado, juntamente com os processos para torná-los permanentes e removê-los.

Sintaxe

Para mapear a chave no Vim, a seguinte sintaxe é usada:







mapa



Na sintaxe acima:



mapa nmap, imap, vmap, xmap, cmap ou omap
* , ,

*Na sintaxe acima, a seção é opcional.

Argumentos Especiais do Vim

Argumentos Especiais do Vim são tags usadas para fornecer funcionalidade adicional aos mapas de teclado. Esses argumentos aparecem após o comando :map e antes de {rhs} e {lhs}.



Por exemplo, para tornar um mapa específico para buffer, use o argumento especial da seguinte maneira:

:mapa < amortecedor > < C-a > ggVG
Para suprimir mensagens ecoadas de um mapa de teclado
Para tornar o buffer do mapa específico (exclusivo para o buffer atual)
Para indicar que o mapa faz parte de um script ou plugin
*É usado para definir as teclas especiais para mapeamento usando a notação <> (teclas de função, control, shift e outras teclas não alfabéticas)
Indica que o lado esquerdo do mapeamento é uma expressão e que deve ser avaliada para obter o lado direito
<único> Para tornar o mapa único entre os mapas locais e globais
Para pular a espera pelo próximo caractere de comando no mapa

As notações principais especiais do Vim são mencionadas na imagem a seguir.

Por exemplo, se você quiser usar a tecla de espaço no mapeamento de teclas, a notação será usada.

Criando um mapa de teclado básico no Vim

Vamos entender o mapeamento de teclas do Vim com um exemplo básico. Quero mapear o comando selecionar todas as linhas ( ggVG ) para ctrl+a chaves. Para mapear as teclas ctrl+a, executarei o seguinte comando no Vim.

:mapa < C-a > ggVG

Aqui, significa o Ctrl e a chaves, enquanto ggVG é um comando para selecionar todas as linhas do arquivo. O :mapa palavra-chave é para mapeamento de modo normal por padrão, no entanto, o :nmap também pode ser usado explicitamente para normal modo.

Da mesma forma, para mapear a funcionalidade de alternância do número da linha com o F1 uso chave:

:mapa < F1 > :definir número !

Agora, ao pressionar a tecla F1 o número da linha será habilitado, e pressioná-la novamente o desabilita.

Observe que este método mapeará apenas as chaves no buffer atual e será removido ao fechar o buffer.

Listando os mapas de teclado

Para listar todos os mapeamentos de teclas dos modos normal, visual e pendente do operador, use o comando :map.

:mapa

Para listar o mapeamento de teclas de inserir e linha de comando modos, use o :map! Comando.

:mapa !

Para listar o mapeamento de teclas de um modo específico, basta digitar a letra inicial do modo antes da palavra-chave map.

:nmap Para exibir os mapas do modo normal
:imapa Para exibir os mapas do modo de inserção
:vmap Para exibir os mapas do modo visual e de seleção
:smap Para exibir os mapas do modo de seleção
:xmap Para exibir os mapas do modo visual
:cmap Para exibir os mapas do modo de linha de comando
:omap Para exibir os mapas do modo pendente do operador

Além disso, para listar todos os mapas incluindo os mapas de plugins com caminhos, use :mapa detalhado comando.

:mapa detalhado

Para uma chave específica, basta mencioná-la no comando ( :mapa detalhado ).

Tornando os mapas de teclado permanentes

Os mapas de teclado mencionados na seção acima mapearão apenas as chaves no buffer atual. Para tornar os mapeamentos de teclas do Vim permanentes, os mapas devem ser colocados no arquivo vimrc.

Observe que ao colocar o mapa de teclado no vimrc arquivo, não adicione dois pontos (:) antes do mapa comando.

Depois de colocar o mapa de teclado no vimrc arquivo, salve e feche-o usando o comando :wq ou usando as teclas shift + zz. Os mapas de teclado colocados no vimrc arquivo será global e poderá ser usado em todas as sessões do Vim. No entanto, certos mapas de teclado podem ser temporariamente desativados se estiverem afetando o trabalho na sessão atual, consulte a seção Como remover um mapa de teclado no Vim abaixo.

O vimrc é o arquivo de configuração do Vim que contém vários comandos e configurações. Está presente no /usr/share/vim/ diretório no macOS e /etc/vim no Linux. É importante notar que vimrc os arquivos nos diretórios mencionados são arquivos específicos do sistema. Você também pode editar esses arquivos para mapeamento de teclas, mas eu recomendaria criar um arquivo específico do usuário vimrc arquivo no diretório inicial.

Evitando recursão

Antes de prosseguir, é importante aprender sobre a recursão no mapeamento de chaves do Vim. Suas desvantagens e como evitá-las. Pode ser compreendido através do uso de um exemplo.

:mapa dd 3jdd

No exemplo acima, mapeei o dd teclas para mover 3 linhas para baixo e excluir a linha sob o cursor. Agora, quando pressiono o dd , ele tentará executar o mapa 3jdd . Vim interpretará o dd comando como um mapa e execute o mapa repetidamente, conforme mostrado na imagem a seguir.

Observação : A recursão pode congelar o editor Vim. Para descongelar, pressione ctrl+c chaves.

Para evitar recursão, substitua o mapa palavra-chave com noremap , onde ' não ' significa não recursivo . vou substituir o mapa palavra-chave com noremap para corrigir a recursão no mapa de teclado acima.

:noremap dd 3jdd

Eu recomendarei usar noremap em vez de mapa para evitar a criação acidental de mapeamento recursivo.

Criando mapas de teclado específicos do modo

O Vim tornou o mapeamento de teclas tão versátil que até mesmo um mapa de teclas de um modo específico pode ser criado facilmente. Por exemplo, se você criou um mapa de teclado para o modo de inserção usando um F1 chave, então você pode mapear a mesma F1 digite outro modo para uma operação totalmente nova.

No exemplo a seguir, mapeei o F1 tecla para excluir 3 linhas no normal modo e puxe 3 linhas no inserir modo.

:nmap < F1 > 3dd
:imapa < F1 > < Ct >

O primeiro mapa exclui três linhas no modo normal ao pressionar a tecla F1, enquanto o segundo mapa adiciona um recuo na linha atual quando no modo de inserção usando a mesma tecla. Agora, vamos entender o mapeamento em cada modo.

Mapeamento do modo normal

Para aplicar um mapa no modo normal, use apenas nmap palavra-chave. Por exemplo, para copiar todas as linhas de um arquivo usando ctrl+c chaves, usarei o seguinte comando.

:nmap < C-c > ggVGy

Conforme discutido anteriormente, é uma prática recomendada usar um método não recursivo para mapear uma chave, portanto, substituirei o nmap com nnoremap palavra-chave.

:nnoremap < C-c > ggVGy

Coloque-o sem dois pontos (:) no vimrc arquivo para torná-lo um mapa de teclado permanente.

usarei noremap ao invés de mapa no exemplo a seguir.

Inserir mapeamento de modo

Para mapear chaves para o modo de inserção, basta usar eu em vez de n . Por exemplo, no modo de inserção, ctrl+p e Ctrl+n as teclas são usadas para preencher automaticamente a palavra com base na correspondência para trás e para frente, respectivamente. Para mapear o ctrl+p teclas com a tecla tab, usarei o seguinte comando.

:inoremap < Aba > < C-p >

Mais importante ainda, se você quiser mapear modo pendente do operador comandos no modo de inserção , então você precisa inserir o tecla no lado direito para sair do modo de inserção para executar esses comandos. Por exemplo, no mapa de teclado a seguir, quero excluir 3 linhas usando o Ctrl+x teclas e entre novamente no modo de inserção.

:inoremap < Cx > 3ddi

Agora, quando pressiono o Ctrl+x teclas, ele imprimirá o 3ddi comando em vez de executá-lo.

Para consertar, vou inserir o antes de o 3ddi comando.

:inoremap < Cx > < Esc > 3ddi

Agora, o comando irá executar o manter-me no modo de inserção.

Muitos mini laptops não possuem o Esc tecla, que é importante para sair do modo atual. Então, para mapear o Esc chave para sair do modo de inserção, o mapeamento de teclas pode ser utilizado. No exemplo a seguir, estou usando ex teclas para sair para o modo normal.

:inoremap ex < Esc >

Quando você pressiona rapidamente o ex teclas o modo de inserção será encerrado, entrando assim no modo normal.

Mapeamento de modo visual

O modo visual é um modo muito significativo para selecionar texto no editor Vim. Além da seleção básica, o modo visual possui outros modos diferentes, como linha visual e modos de bloco visual.

No modo visual, til (~) é usado para alternar o caso. Para usar o til (~), você deve pressionar as duas teclas (shift+~) . No exemplo a seguir, estou mapeando a chave c em modo visual para selecionar uma palavra sob o cursor e alterar seu caso.

:vnoremap c iw~

Agora pressione v para entrar no modo visual e pressione a tecla c para alternar a palavra sob o cursor, conforme mostrado no GIF a seguir.

Mapeamento do modo de linha de comando

Muitos comandos essenciais do Vim funcionam apenas no modo de linha de comando. Como, para salvar o arquivo :Em comando é usado, da mesma forma, para salvar e sair :qq comando é usado. Todas as guias e operações de divisão também são feitas no modo de linha de comando. Por exemplo, para criar uma nova aba, o : subordinar comando é usado. Bem, para criar uma guia rapidamente, ctrl+t chaves são suficientes.

:cnoremap < Ct > assunto < CR >

Agora, pressione dois pontos (:) para entrar no modo de linha de comando e então ctrl+t para abrir uma nova aba; é muito mais rápido do que digitar o texto inteiro assunto comando e Retornar chave.

Criando comandos personalizados do Vim
Entrar no modo de comando para executar um mapa parece menos útil. Mas você pode criar seus próprios comandos personalizados no Vim usando o :comando opção. Este recurso se assemelha bastante ao mapeamento de teclas do Vim. Por exemplo, para criar um comando rápido para definir o número da linha e a largura do texto como 80, use o comando a seguir.

:comando Mycmd :definir número largura do texto = 80

Agora, entre no modo de comando e execute o :Mycmd comando.

Mapeamento de modo pendente do operador

O modo de operador pendente é um modo no qual o Vim aguarda o comando de movimento após a tecla do operador ser pressionada. Os operadores comuns são y, d e c. Por exemplo, para excluir a linha atual e as 3 linhas seguintes, você usará o operador d com 3j movimento (d3j). Você não pode pressionar essas teclas simultaneamente para obter a operação desejada.

O modo geralmente é usado para mapear os movimentos. Vamos mapear um movimento que selecionará a linha atual e as 3 linhas seguidas por ela.

:onoremap < F2 > 3j

Agora, para arrancar a linha atual e as 3 linhas seguidas por ela, use o oF2 chaves, da mesma forma, o d operador também pode ser aplicado.

Outra coisa importante a ter em mente é se você adicionar uma contagem ao movimento mapeado acima mencionado, digamos 2 , o mapa considerará 23j, não 6j. Para corrigir isso, o registro de expressão “= pode ser usado. O mapa acima pode ser modificado como @=’3j’ .

:onoremap < F2 > @ ='3j' < CR >

Como mapear eventos de mouse

Embora o Vim seja um editor de texto centrado no teclado totalmente personalizável, a disponibilidade da funcionalidade do mouse o torna ainda melhor. Além das teclas normais do teclado, todos os eventos do mouse também podem ser mapeados no Vim. Por exemplo, se você deseja mapear o clique duplo direito e o clique duplo esquerdo para pular as marcas para frente e para trás respectivamente, use o mapeamento a seguir.

:noremap < 2 -Direito do mouse > ] `
:noremap < 2 -Mouse esquerdo > [ `

Outros eventos de mouse que podem ser mapeados são fornecidos na tabela a seguir.

<2-Esquerdo do Mouse>
<2-Rato Direito>
<3-Esquerdo do Mouse>
<3-Rato Direito>
<4-Esquerdo do Mouse>
<4-Rato Direito>

Como mapear com a chave líder no Vim

O mapeamento do Vim está incompleto sem a chave líder. A chave líder é a chave padrão que pode ser usada para mapear chaves, mesmo que elas sejam mapeadas para realizar outras tarefas. Por exemplo, se você mapeou o d chave para excluir todas as linhas, então podemos mapear a mesma chave para excluir apenas 5 linhas usando a chave líder.

Para quem não tem familiaridade, com a chave líder do Vim. É uma chave prefixada com outra chave ou conjunto de chaves para mapear comandos ou operações. A chave líder padrão do Vim é uma barra invertida (\), mas é personalizável.

Por exemplo, o dd O comando é usado para excluir a linha sob o cursor. Se você quiser mapear o dd comando para excluir todas as linhas nos arquivos, então você pode usar a chave líder.

:noremap < Líder > dd ggVGd

Agora, sempre que você pressionar o \dd chave, todas as linhas do arquivo serão excluídas. Você pode atribuir a chave líder do Vim como a chave de controle no Windows ou a chave de comando no macOS.

Como mapear uma função Vimscript

O editor Vim não se limita aos comandos ou operações. Existe uma linguagem de programação completa em torno do Vim para criar funcionalidades personalizadas chamadas Vimscript. Você pode criar facilmente um script ou função e mapeá-lo para uma chave. Por exemplo, vamos criar uma função que permitirá configurações como número de linha, funcionalidade do mouse e largura de texto.

função Minhas configurações ( )
definir número
definir rato =uma
definir largura do texto = 80
função final

Coloque esta função no arquivo vimrc.

Vamos mapear esta função com as teclas líder e s. usarei

:noremap < Líder > s:call MinhasConfigurações ( ) < CR >

Agora, sempre que você pressionar o \s teclas, a função será chamada e qualquer funcionalidade dentro da função será executada.

Observação : A primeira letra do nome da função deve sempre ser maiúscula ao criar uma função personalizada no Vim.

Como mapear comandos externos no Vim

Os comandos externos também podem ser mapeados no Vim. Comandos externos referem-se a comandos Linux ou Unix. Por exemplo, se você quiser mapear o ambiente externo organizar comando para classificar todas as linhas no buffer atual para o F1 chave, use o seguinte comando.

:noremap < F1 > : %! organizar < CR >

Da mesma forma, se você estiver escrevendo um arquivo de script e tornando-o executável sem sair da sessão do Vim, você pode usar o comando chmod comando internamente. Por exemplo, para tornar o arquivo atual executável, você pode executar o comando :!chmod +x % em Vim. Se você executa essa tarefa com frequência, basta mapear uma chave para ela.

:noremap < F1 > : ! chmod +x %

No Vim, qualquer comando externo pode ser usado com um sinal de exclamação (!).

Como remover um mapa de teclado no Vim

Para remover mapas de teclado no Vim, primeiro identifique onde ele está definido. Conforme discutido anteriormente, os mapas de teclado podem ser locais de buffer e permanentes. Se o mapa de teclado for permanente e colocado no arquivo vimrc, simplesmente removê-los do arquivo removerá o mapeamento das chaves.

Se o mapeamento for feito no buffer atual, eles poderão ser removidos usando o :desmapear ou :desmapear! comandos.

  • :desmapear para limpar mapas de teclado dos modos normal, visual, seleção ou operador pendente
  • :desmapear! para limpar mapas de teclado dos modos de inserção e linha de comando

Por exemplo, para remover o chave, use o :desmapear . Além disso, a remoção das chaves pode ser específica do modo. Se você deseja remover o mapa do modo normal, use o :nunmap . Outros comandos específicos do modo para remover um mapa de teclado são mencionados abaixo:

:nunmap Para remover os mapas do normal modo
:iunmap Para remover os mapas do inserir modo
:vunmap Para remover os mapas do visual e selecione modo
:mapa solar Para remover os mapas do selecione modo
:xunmap Para remover os mapas do visual modo
:cunmap Para remover os mapas do linha de comando modo
:ouunmap Para remover os mapas do operador pendente modo

Para remover todos os mapas no buffer atual, use o :mapa claro comando.

:mapa claro

O comando acima limpará todos os mapas de teclado do modo normal, visual, seleção ou operador pendente.

Para limpar todos os mapas de teclado dos modos de inserção e linha de comando, use:

:mapa claro !

Observe que os comandos padrão do Vim não podem ser claros, no entanto, podem ser desabilitados usando o :desmapear comando com . Por exemplo, se você deseja desabilitar a funcionalidade dd que exclui a linha sob o cursor, use :unmap dd .

:desmapear dd < Não >

O dd não funcionará mais no buffer atual. Usando este método, qualquer mapa de teclado pode ser desabilitado para a sessão atual.

Folha de referências do mapeamento de chaves do Vim

A imagem a seguir fornece uma lista de todos os comandos e seus modos específicos para referência.

Conclusão

O mapeamento de teclas do Vim é uma maneira prática de automatizar suas tarefas, vinculações de teclas usadas com frequência, comandos e outras operações. É um tópico diversificado e neste guia abordei todos os principais aspectos relacionados ao mapeamento de teclas no Vim. Da sintaxe geral à criação de um mapa de teclado básico e até o mapeamento de funções avançadas do Vimscript e comandos externos. Para saber mais sobre o mapeamento de teclas do Vim, use o :ajuda mapeamento de teclas comando no Vim.