# O Modo de Entrada do VI

## Modo de Entrada do VI

O objectivo do modo do VI não é ser um substituto perfeito do Vim e suportar todas as funcionalidades do mesmo. O seu objectivo é criar a abordagem do Vim na edição de texto - assim como os hábitos adquiridos - e disponibilizá-la para os programas que usam o editor de texto &kappname; como editor interno.

O modo do VI pretende integrar-se convenientemente com os programas e desvia-se do comportamento do Vim onde fizer sentido. Por exemplo, o ``:w`` irá abrir uma janela de gravação no modo de VI do &kappname;.

Para activar o modo de entrada do VI para todas as janelas novas, vá a Configuração Configurar o &kappname;... Edição Modo de Entrada do VI. Nesta página, poderá definir opções para este modo e editar a associação de teclas no mesmo. O modo em questão também poderá ser activado ou desactivado com a opção Modo de Entrada do VI do menu Editar. (A combinação de teclas por omissão é Meta&Ctrl;V - onde o Meta normalmente é a tecla do Windows).

Muitos dos comandos do Vi fazem a distinção entre maiúsculas e minúsculas, ao contrário da maioria dos atalhos de teclado do &kde;. Isto significa que o `y` e o `Y` são comandos diferentes. Para indicar o comando `y` (copiar), verifique se o Caps Lock está desligado e carregue em Y. Para introduzir o comando `Y` (copiar até ao fim da linha), faça &Shift;Y.

Isto não se aplica aos comandos que usam a tecla &Ctrl;, que poderão ser introduzidos independentemente do estado do Caps Lock e sem ser necessário carregar no &Shift;. Contudo, alguns comandos necessitam de usar a combinação da tecla &Ctrl; com outra tecla que faça distinção de maiúsculas. Por exemplo, para introduzir &Ctrl;W, `h` (mudar para a área dividida à direita), certifique-se que o Caps Lock está desactivado, carregue em &Ctrl;W, largue as teclas e depois carregue em H.

### Incompatibilidades com o Vim

Existem apenas algumas funcionalidades do modo de VI do &kappname; que são incompatíveis com o Vim (sem contar com as funcionalidades em falta). Estas aparecem abaixo em conjunto com as razões respectivas.

- &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.

  A razão para ter o U a comportar-se como o 'refazer' no modo de VI do &kappname; é que o &Ctrl;R, por omissão, é capturado pela função de substituição do &kappname; (procurar e substituir). Por omissão, o modo do VI não irá substituir os atalhos do &kappname; (isto poderá ser configurado em Configuração Configurar o &kappname;... Edição Modo de Entrada VI), como tal, é necessária uma acção para refazer como uma tecla normal da mesma forma. Para além disso, o comportamento do comando U do Vim não se associa bem ao sistema de anulações interno do &kappname;, pelo que seria difícil de implementar à mesma.

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

  Vim: O ``print`` imprime as linhas d intervalo indicado, como acontecia com o seu avô 'ed'.

  Os comandos como o ``:print`` estão disponíveis não só no modo VI mas também para os utilizadores que usam o &kappname; normal também - daí, o comando ``:print`` abre a janela de impressão - seguindo o princípio da mínima surpresa em vez de imitar o comportamento do Vim.

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

  Vim: O `Y` copia a linha inteira, como acontece com o `y` `y`.

  O comportamento do VI para o comando `Y` é, na prática, um erro. Tanto para os comandos de modificação como de remoção, o `c` `c`/ `d` `d` irão fazer a sua acção para a linha actual e o `C`/`D` irão funcionar desde a coluna do cursor até ao fim da linha. Contudo, tanto o `y` `y` como o `Y` copiam a linha actual. No modo de VI do &kappname;, o `Y` irá copiar até ao fim da linha. Isto é descrito como sendo mais lógico na documentação do Vim.

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

  Vim: O `O` e o `o` abrem uma linha nova e insere o texto [`quantidade`] vezes ao sair do modo de inserção.

  Isto normalmente é feito em consequência de assistir a muitas pessoas a confundirem-se com este comportamento num canal de IRC do 'vim' (#vim no freenode).

### Mudar de Modos

- O Modo Normal permite-lhe introduzir comandos para navegar ou editar um documento, sendo o modo predefinido. Poderá voltar a ele a partir de qualquer modo se carregar em &Esc;.

- O Modo Visual permite-lhe realçar o texto num documento. A maioria dos comandos do Modo Normal também são válidos neste modo. Poderá entrar no mesmo se carregar em `v` para seleccionar os caracteres ou em `V` para seleccionar linhas.

- O Modo de Inserção permite-lhe editar directamente o documento. Poderá entrar nele se carregar em `i` ou num dos vários comandos indicados em baixo.

- O Modo do Comando invoca a linha de comandos do &kappname;, o que lhe permite executar muitos dos comandos disponíveis nas implementações do Vi, assim como algumas específicas do &kappname;. Para mais informações sobre estes comandos, veja a advanced-editing-tools-commandline. Para o usar, carregue em :, indique o comando e carregue em &Enter;.

### Integração com as Funcionalidades do Kate

- O Modo Visual é activado automaticamente quando seleccionar o texto com o rato. Também entrará nele quando usar as funções do Kate que seleccionam o texto, como a opção Seleccionar Tudo (quer no menu quer com a combinação de teclas &Ctrl;A .)

- As marcações do VI e os favoritos do Kate estão integradas. Quando for criada uma marcação no modo do VI, é criado um favorito equivalente no Kate e aparecerá então no menu Favoritos. Da mesma forma, quando criar um favorito do Kate, será criada uma marcação do VI na coluna 0 da mesma forma.

### Comandos suportados no modo normal/visual

`a` | Entra no modo de Inserção; adiciona a seguir ao cursor
`A` | Entra no modo de Inserção; adiciona a seguir à linha
`i` | Entra no modo de Inserção; insere antes do cursor
Inserir | Entra no modo de Inserção; insere antes do cursor
`I` | Entra no modo de Inserção; insere antes do primeiro carácter não-vazio da linha
`gi` | Entra no modo de Inserção; insere antes do cursor, deixando o último modo de inserção
`v` | Entra no modo Visual; selecciona os caracteres
`V` | Entra no modo Visual; selecciona as linhas
&Ctrl;V | Entra no modo Visual; selecciona os blocos
`gb` | Entra no modo Visual; volta a seleccionar a última selecção
`o` | Abre uma linha nova abaixo da linha actual
`O` | Abre uma linha nova acima da linha actual
`J` | Junta as linhas
`c` | Modificar: seguido de um movimento para apagar ou entrar no modo de inserção
`C` | Modificar até ao fim da linha: Apaga até ao fim da linha e entra no modo de Inserção
`cc` | Modificar a linha: Apaga a linha e entra no modo de Inserção
`s` | Substitui o carácter
`S` | Substitui a linha
`dd` | Apaga a linha
`d` | Seguido de um movimento para apagar
`D` | Apaga até ao fim da linha
`x` | Apaga o carácter à direita do cursor
Apagar | Apaga o carácter à direita do cursor
`X` | Apaga o carácter à esquerda do cursor
`gu` | Seguido de um movimento para converter para minúsculas
`guu` | Converte a linha actual para minúsculas
`gU` | Seguido de um movimento de conversão para maiúsculas
`gUU` | Converte a linha actual para maiúsculas
`y` | Seguido de um movimento de yank (cópia)
`yy` | Copia a linha
`Y` | Copia a linha
`p` | Cola a seguir ao cursor
`P` | Cola antes do cursor
`]p` | Cola a seguir ao cursor com indentação
`[p` | Cola antes do cursor com indentação
`r` | Seguido e um carácter para substituir o carácter após o cursor
`R` | Entra no modo de Substituição
`:` | Entra no modo de Comandos
`/` | Procurar
`u` | Desfazer
&Ctrl;R | Refazer
`U` | Refazer
`m` | Define uma marca (pode ser usado posteriormente nos movimentos)
`n` | Procurar o seguinte
`N` | Procurar o anterior
`>>` | Indenta a linha
`<<` | Remove a indentação da linha
`>` | Indenta as linhas
`<` | Remove a indentação das linhas
&Ctrl;F | Página abaixo
&Ctrl;B | Página acima
`ga` | Imprime o valor em ASCII do carácter
`.` | Repete a última alteração
`==` | Comando de alinhamento da linha
`=` | Comando de alinhamento das linhas
`~` | Muda a capitalização do carácter actual
&Ctrl;S | Dividir a janela na horizontal
&Ctrl;V | Dividir a janela na vertical
&Ctrl; W, `w` | Circular para a próxima janela dividida
&Ctrl; W, `h` &Ctrl; W Esquerda | Circular para a janela dividida da esquerda
&Ctrl; W, `l` &Ctrl; W Direita | Circular para a janela dividida da direita
&Ctrl; W, `k` &Ctrl; W Cima | Circular para a janela dividida em cima
&Ctrl; W, `j` &Ctrl; W Down | Circular para a janela dividida em baixo

### Movimentos suportados

Estes poderão ser usados para mover-se por um documento no modo Normal ou Visual, ou ainda em conjunto com um dos comandos acima. Estes poderão ser antecedidos de uma dada quantidade, que indica quantos movimentos serão feitos.

`h` | Esquerda
Esquerda | Esquerda
&Backspace; | Esquerda
`j` | Baixo
Baixo | Baixo
`k` | Cima
Cima | Cima
`l` | Direita
Direita | Direita
Espaço | Direita
`$` | Fim da linha
End | Fim da linha
`0` | Primeiro carácter da linha (Coluna 0)
Home | Primeiro carácter da linha
`^` | Primeiro carácter não-vazio de uma linha
`f` | Seguido do carácter a mover para a direita do cursor
`F` | Seguido do carácter a mover para a esquerda do cursor
`t` | Seguido do carácter a mover para a direita do cursor, colocando o cursor no carácter antes do mesmo
`T` | Seguido do carácter a mover para a esquerda do cursor, colocando o cursor no carácter antes do mesmo
`gg` | Primeira linha
`G` | Última linha
`w` | Palavra Seguinte
`W` | Próxima palavra separada por espaços
`b` | Palavra anterior
`B` | Palavra anterior separada por espaços
`e` | Fim da palavra
`E` | Fim da palavra separada por espaços
`ge` | Fim da palavra anterior
`gE` | Fim da palavra anterior separada por espaço
`|` | Seguido de um número de coluna para se mover para essa coluna
`%` | Seguido de um item para mover para o mesmo
``` | Marcar
`‘` | Primeiro carácter não-vazio da linha onde se encontra a marca
`[[` | Parêntesis de abertura anterior
`]]` | Parêntesis de abertura seguinte
`[]` | Parêntesis de fecho anterior
`][` | Parêntesis de fecho seguinte
&Ctrl;I | Saltar para a localização seguinte
&Ctrl;O | Saltar para a localização anterior
`H` | Ir para a primeira linha do ecrã
`M` | Ir para a linha do meio do ecrã
`L` | Ir para a última ĺinha do ecrã
`%`percentagem`` | Vai para a percentagem indicada no comando
`gk` | Subir uma linha visualmente (ao usar a mudança de linha dinâmica)
`gj` | Descer uma linha visualmente (ao usar a mudança de linha dinâmica)
&Ctrl;Esquerda | Move para uma palavra à esquerda
&Ctrl;Direita | Move para uma palavra à direita

### Objectos de texto suportados

Estes poderão ser usados para seleccionar certas partes de um documento.

`iw` | Palavra interior: palavra incluindo os espaços em branco
`aw` | Uma palavra: palavra excluindo os espaços em branco
`i"` | Aspas (`"`) anteriores ate às seguintes, incluindo as mesmas
`a”` | Aspas (`"`) anteriores ate às seguintes, excluindo as mesmas
`i'` | Plicas (`'`) anteriores ate às seguintes, incluindo as mesmas
`a'` | Plicas (`'`) anteriores ate às seguintes, excluindo as mesmas
`i(` | Parêntesis de abertura anteriores [`(`] até aos seguintes [`)`], incluindo os mesmos
`a(` | Parêntesis de abertura anteriores [`(`] até aos seguintes [`)`], excluindo os mesmos
`i[` | Parêntesis rectos de abertura anteriores (`[`) até aos seguintes (`]`), incluindo os mesmos
`a[` | Parêntesis rectos de abertura anteriores (`[`) até aos seguintes (`]`), excluindo os mesmos
`i{` | Chavetas de abertura anteriores (`{`) até aos seguintes (`}`), incluindo os mesmos
`a{` | Chaveta de abertura anteriores (`{`) até aos seguintes (`}`), excluindo os mesmos
`i<` | Sinais de menor anteriores (`<`) até aos seguintes (`>`), incluindo os mesmos
`a<` | Sinais de menor anteriores (`<`) até aos seguintes (`>`), excluindo os mesmos
`i`` | Plicas (```) anteriores ate às seguintes, incluindo as mesmas
`a`` | Plicas (```) anteriores ate às seguintes, excluindo as mesmas

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

&Ctrl;D | Remover a indentação
&Ctrl;T | Indentação
&Ctrl;E | Inserir em baixo
&Ctrl;Y | Apaga a palavra
&Ctrl;W | Apaga a palavra
&Ctrl;U | Apaga a linha
&Ctrl;J | Nova linha
&Ctrl;H | Apaga o carácter atrás
&Ctrl;Home | Vai para o primeiro carácter do documento
&Ctrl;R `n` | Insere o conteúdo do registo c`n`
&Ctrl;O, `comando` | Entrar no modo normal apenas para um comando
&Ctrl;A | Incrementa o número seleccionado de momento
&Ctrl;X | Decrementa o número seleccionado de momento

### O Objecto de Texto de Vírgulas

Falta este objecto no Vim. O objecto de texto de vírgulas simplifica a modificação das listas de parâmetros em linguagens como o C e em listas separadas por vírgulas. É basicamente a área entre duas vírgulas ou entre uma vírgula e um parêntesis. Na linha que aparece à direita, os três intervalos que este objecto de texto pode cobrir estão realçados a vermelho.

Um exemplo do Objecto de Texto de Vírgulas Um exemplo do Objecto de Texto de Vírgulas

Intervalos dos objectos de texto com vírgulas. Se o cursor estiver sobre ⪚ `arg2`, ao carregar em `ci`, (mudar a vírgula interior) iria apagar o `double arg2` e colocar o cursor entre as duas vírgulas no modo de inserção. Uma forma bastante conveniente de mudar os parâmetros de uma função.

### Funcionalidades em Falta

Como foi dito anteriormente, o objectivo do modo de VI do &kappname; não é suportar a 100% as funcionalidades do Vim.