# O modo de entrada do VI

## Modo de entrada do VI

O objetivo do modo VI não é ser um substituto completo para o Vim e suportar todas as funcionalidades do Vim. O objetivo é tornar o jeito Vim de edição de texto - e os hábitos Vim aprendidos - disponíveis para os programas que usam o editor de texto do &kappname; como seu editor interno.

O modo VI busca integrar-se de maneira transparente aos programas e se afastar do comportamento do Vim onde fizer sentido. Por exemplo, ``:w`` abrirá uma janela para salvar no modo VI do &kappname;.

Para ativar o Modo de entrada VI para todas as novas visualizações, vá para Configurações Configurar o &kappname;... Edição Modo de entrada VI. Nesta página você pode definir opções para o Modo de entrada VI e definir e editar o mapeamento de teclado neste modo. O Modo de entrada VI pode também ser alternado com a configuração Modo de entrada VI no menu Editar. (O atalho de teclado padrão é Meta&Ctrl;V - onde o Meta é normalmente a tecla Windows).

Muitos comandos de teclado do modo Vi são sensíveis à caixa, diferentemente da maioria dos atalhos de teclado do &kde;. Isto significa que `y` e `Y` são comando diferentes. Para inserir o comando `y` (yank - empurrar), certifique-se de que o Caps Lock está desativado e pressione Y. Para inserir o comando `Y` (empurrar para o fim da linha), &Shift;Y.

Isto não se aplica aos comandos que usam a tecla &Ctrl;, que podem ser inseridos independentemente do modo do Caps Lock e sem pressionar o &Shift;. No entanto, alguns comandos necessitam do uso da combinação da tecla &Ctrl; seguida por outra tecla que diferencie maiúsculas e minúsculas. Por exemplo, para inserir &Ctrl;W, `h` (alternar para a visão dividida à direita) certifique-se de que o Caps Lock está desativado, pressione &Ctrl;W, solte e então pressione H.

### Incompatibilidades com o Vim

Existem algumas poucas funcionalidades do modo VI do &kappname; que são incompatíveis com o Vim (sem contar as que estão faltando). Elas estão listadas abaixo juntamente com os motivos para esta incompatibilidade.

- &kappname;: o `U` e o &Ctrl;R são o 'Refazer'.

  Vim: &Ctrl;R é o 'refazer' normal, enquanto o U é usado para anular todas as últimas alterações numa linha.

  O motivo para ter a ação U como refazer no modo VI do &kappname; é que o atalho &Ctrl;R por padrão é usado pela função substituir do &kappname; (localizar e substituir). Por padrão, o modo VI não se sobrepõe aos atalhos do &kappname; (isto pode ser configurado em Configurações Configurar o &kappname;... Edição Modo de entrada VI), assim a ação de refazer precisa estar disponível como uma tecla normal. Além disso, o comportamento do comando `U` no Vim não corresponde exatamente ao sistema de refazer interno do &kappname;, assim isto seria um suporte não tão trivial de qualquer maneira.

- &kappname;: ``print`` mostra a janela Imprimir.

  Vim: ``print`` imprime as linhas de um determinado intervalo como seu avô, o 'ed'.

  Comandos como ``:print`` estão disponíveis não somente no modo VI para usuários que usam o &kappname; normal também - assim, o comando ``:print`` abre a janela de impressão - seguindo o princípio da menor surpresa ao invés de simplesmente imitar o comportamento do Vim.

- &kappname;: `Y` copia até o fim da linha.

  Vim: `Y` copia toda a linha, como no `y` `y`.

  O comportamento do VI para o comando `Y` é na prática um erro. Para os comandos 'change' e 'delete', `c` `c`/ `d` `d` fará esta ação na linha atual e `C`/`D` funcionará da coluna do cursor até o final da linha. No entanto, `y` `y` e `Y` copia a linha atual. No Modo VI do &kappname;, `Y` copia até o fim da linha. Isto é considerado mais lógico na documentação do Vim.

- &kappname;: `O` e `o` abre [`tantas`] novas linhas e entra no modo de inserção.

  Vim: `O` e `o` abre uma nova linha e insere o texto [`tantas`] vezes ao deixar o modo de inserção.

  Isto é normalmente feito como uma consequência de se observar muitas pessoas confusas com este comportamento no canal &irc; do vim (#vim no Libera Chat).

### Alternando modos

- Modo Normal permite que você insira comandos para navegar ou editar um documento, sendo o modo padrão. Você pode retornar à ele a partir de outro modo pressionando &Esc;.

- Modo Visual permite que você selecione texto em um documento. A maioria dos comandos do Modo Normal são também válidos neste modo. Você pode entrar nele pressionando `v` para selecionar caracteres ou `V` para selecionar linhas.

- Modo Inserção permite que você edite o documento diretamente. Você pode entrar nele pressionando `i` ou um dos vários comandos listados abaixo.

- O Modo Comando invoca a linha de comando do &kappname;, permitindo que você execute muitos dos comandos disponíveis nas implementações do Vi bem como alguns específicos do &kappname;. Para mais informações sobre estes comandos, veja advanced-editing-tools-commandline. Para usá-lo, pressione :, insira o comando e pressione &Enter;.

### Integração com as funcionalidades do &kate;

- O Modo Visual é ativado automaticamente quando o texto é selecionado com o mouse. Isto é também ativado ao usar funções do &kate; que selecionam texto, como a Selecionar tudo (por meio do menu ou usando o &Ctrl;A ).

- As marcas do Vi e os favoritos do &kate; são integrados. Quando uma marca é criada no Modo Vi, um favorito correspondente no &kate; é criado e aparece no menu Favoritos. Do mesmo modo, quando um favorito do &kate; é criado, uma marca correspondente do Vi na coluna 0 é também criada.

### Comandos suportados nos modos normal/visual

`a` | Entra no Modo Inserção; adiciona após o cursor
`A` | Entra no Modo Inserção; adiciona após a linha
`i` | Entra no Modo Inserção; insere antes do cursor
&Ins; | Entra no Modo Inserção; insere antes do cursor
`I` | Entra no Modo Inserção; insere antes do primeiro caracter não-vazio da linha
`gi` | Entra no Modo Inserção; insere antes do cursor, deixando o último modo de inserção
`v` | Entra no Modo Visual; seleciona caracteres
`V` | Entra no Modo Visual; seleciona linhas
&Ctrl;v | Entra no Modo Visual; seleciona blocos
`gb` | Entra no Modo Visual; seleciona novamente a última seleção
`o` | Abre uma nova linha abaixo da linha atual
`O` | Abre uma nova linha acima da linha atual
`J` | Junta linhas
`c` | Muda: seguido de um deslocamento para excluir e entrar no Modo Inserção
`C` | Muda até o final da linha: Exclui até o final da linha e entre na Modo Inserção
`cc` | Muda a linha: Exclui a linha e entre no Modo Inserção
`s` | Substitui caractere
`S` | Substitui linha
`dd` | Excluir linha
`d` | Seguido de deslocamento para excluir
`D` | Exclui até o fim da linha
`x` | Exclui caractere à direita do cursor
∇ | Exclui caractere à direita do cursor
`X` | Exclui caractere à esquerda do cursor
`gu` | Seguido com um deslocamento para transformar em minúsculas
`guu` | Transforma a linha atual em minúsculas
`gU` | Seguido de um deslocamento para tornar maiúsculas
`gUU` | Transforma a linha atual em maiúsculas
`y` | Seguido de um deslocamento para copiar (do termo em inglês yank
`yy` | Copia (do termo em inglês) a linha
`Y` | Copia (do termo em inglês) a linha
`p` | Colar após o cursor
`P` | Colar antes do cursor
`]p` | Colar após o cursor com recuo
`[p` | Colar antes do cursor com recuo
`r` | Seguido de um caractere para substituir o caractere após o cursor
`R` | Entra no modo Substituição
`:` | Entra no Modo Comando
`/` | Procurar
`u` | Desfazer
&Ctrl;R | Refazer
`U` | Refazer
`m` | Definir marcador (pode ser usado por deslocamentos mais tarde)
`n` | Localizar próxima
`N` | Localizar anterior
`>>` | Recuar linha
`<<` | Remover recuo da linha
`>` | Recuar linhas
`<` | Remover recuos da linhas
&Ctrl;F | Página abaixo
&Ctrl;B | Página acima
`ga` | Imprimir o valor &ASCII; do caractere
`.` | Repetir última mudança
`==` | comandoAlinharLinha
`=` | comandoAlinharLinhas
`~` | Muda a caixa (maiúscula ou minúscula) do caractere atual
&Ctrl;S | Dividir visão horizontalmente
&Ctrl;V | Dividir visão verticalmente
&Ctrl; W, `w` | Próxima divisão da janela
&Ctrl; W, `h` &Ctrl; W&Left; | Ir para a divisão da janela à esquerda
&Ctrl; W, `l` &Ctrl; W&Right; | Ir para a divisão da janela à direita
&Ctrl; W, `k` &Ctrl; W&Up; | Ir para a divisão da janela acima
&Ctrl; W, `j` &Ctrl; W&Down; | Ir para a divisão da janela abaixo

### Movimentos suportados

As teclas a seguir podem ser usadas para mover-se em um documento no modo Normal ou Visual, ou em conjunção com um dos comandos acima. Elas podem ser precedidas por um número, que indica quantas vezes o referido movimento será feito.

`h` | Esquerda
&Left; | Esquerda
&Backspace; | Esquerda
`j` | Abaixo
&Down; | Abaixo
`k` | Acima
&Up; | Acima
`l` | Direita
&Right; | Direita
&Space; | Direita
`$` | Fim da linha
End | Fim da linha
`0` | Primeiro caractere da linha (Coluna 0)
Home | Primeiro caractere da linha
`^` | Primeiro caractere não vazio da linha
`f` | Seguido pelo caractere para mover para direita do cursor
`F` | Seguido pelo caractere para mover para esquerda do cursor
`t` | Seguido pelo caractere para mover para direita do cursor, colocando o cursor no caractere antes dele
`T` | Seguido pelo caractere para mover para esquerda do cursor, colocando o cursor no caractere antes dele
`gg` | Primeira linha
`G` | Última linha
`w` | Próxima palavra
`W` | Próxima palavra separada por espaço em branco
`b` | Palavra anterior
`B` | Palavra anterior separada por espaço em branco
`e` | Fim da palavra
`E` | Fim da palavra separada por espaço em branco
`ge` | Fim da palavra anterior
`gE` | Fim da palavra anterior separada por espaço em branco
`|` | Seguido de um número de coluna para mover para esta coluna
`%` | Seguido por um item para mover para este item
``` | Marca
`‘` | Marca o primeiro caractere não em branco da linha
`[[` | Colchete de abertura anterior
`]]` | Próximo colchete de abertura
`[]` | Colchete de fechamento anterior
`][` | Próximo colchete de fechamento
&Ctrl;I | Saltar para a próxima localização
&Ctrl;O | Saltar para a localização anterior
`H` | Ir para a primeira linha da tela
`M` | Ir para a linha do meio da tela
`L` | Ir para a última linha da tela
`%`porcentagem`` | Ir para a porcentagem especificada do documento
`gk` | Ir para a linha visualmente acima (quando usar a quebra de linha dinâmica)
`gj` | Ir para a linha visualmente abaixo (quando usar a quebra de linha dinâmica)
&Ctrl;&Left; | Move para uma palavra à esquerda
&Ctrl;&Right; | Move para uma palavra à direita

### Objetos de texto suportados

Estes objetos podem ser usados para selecionar determinadas porções de um documento.

`iw` | Palavra interna: palavra incluindo espaços em branco
`aw` | Uma palavra: palavra excluindo espaços em branco
`i"` | Aspas duplas (`"`) anterior até as próximas aspas duplas, incluindo marcas de citação
`a”` | Aspas duplas (`"`) anterior até as próximas aspas duplas, excluindo marcas de citação
`i'` | Aspas simples (`'`) anterior até as próximas aspas simples, incluindo marcas de citação
`a'` | Aspas simples (`'`) anterior até as próximas aspas simples, excluindo marcas de citação
`i(` | Parênteses de abertura [`(`] anterior até o próximo parênteses de fechamento [`)`], incluindo os parênteses
`a(` | Parênteses de abertura [`(`] anterior até o próximo parênteses de fechamento [`)`], excluindo os parênteses
`i[` | Colchete de abertura (`[`) anterior até o próximo colchete de fechamento (`]`0, incluindo os colchetes
`a[` | Colchete de abertura (`[`) anterior até o próximo colchete de fechamento (`]`0, excluindo os colchetes
`i{` | Colchete de abertura (`[`) anterior até o próximo colchete de fechamento (`]`0, incluindo os colchetes
`a{` | Parênteses de abertura (`{`) anterior até o próximo parênteses de fechamento (`}`0, excluindo os parênteses
`i<` | Divisa de abertura (`<`) anterior até a próximo divisa de fechamento (`>`0, incluindo as divisas
`a<` | Divisa de abertura (`<`) anterior até a próxima divisa de fechamento (`>`0, excluindo as divisas
`i`` | Apóstrofo anterior (```) até o próximo apóstrofo, incluindo os apóstrofos
`a`` | Apóstrofo anterior (```) até o próximo apóstrofo, excluindo os apóstrofos

### Comandos de modo de inserção suportados

&Ctrl;D | Retirar recuo
&Ctrl;T | Recuar
&Ctrl;E | Inserir abaixo
&Ctrl;Y | Apagar palavra
&Ctrl;W | Apagar palavra
&Ctrl;U | Excluir linha
&Ctrl;J | Nova linha
&Ctrl;H | Apaga o caractere atrás
&Ctrl;Home | Move para o primeiro caractere no documento
&Ctrl;R `n` | Inserir o conteúdo do registro `n`
&Ctrl;O, `comando` | Entrar no modo normal somente para um comando
&Ctrl;A | Incrementar o número atualmente selecionado
&Ctrl;X | Decrementar o número atualmente selecionado

### O Objeto de Texto Vírgula

Este objeto está faltando no Vim. O objeto de texto vírgula torna mais fácil modificar listas de parâmetros em linguagens no estilo C e outras listas separadas por vírgula. Isto é basicamente a área entre duas vírgulas ou entre uma vírgula e um colchete. Na linha mostrada na ilustração, os três intervalos que este objeto de texto pode ter são realçados.

Um exemplo de Objeto de Texto de Vírgula Um exemplo de Objeto de Texto de Vírgula

Intervalos de objeto de texto de vírgula. Se o cursor está sobre o ⪚ `arg2`, pressionar `ci`, (mudar vírgula interna) removeria `double arg2` e posicionaria o cursor entre as duas vírgulas no modo de inserção. Uma maneira muito conveniente de mudar os parâmetros da função.

### Funcionalidades que faltam

Como dito anteriormente, o objetivo do Modo VI do &kappname; não é suportar 100% das funcionalidades do Vim.