Capítulo 9. O modo de entrada do VI

Erlend Hamberg

Tradução: Marcus Gama

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

Para ativar o Modo de entrada VI para todas as novas visualizações, vá para ConfiguraçõesConfigurar o KatePart...+EdiçãoModo 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).

Nota

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

  • KatePart: 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 KatePart é que o atalho Ctrl+R por padrão é usado pela função substituir do KatePart (localizar e substituir). Por padrão, o modo VI não se sobrepõe aos atalhos do KatePart (isto pode ser configurado em ConfiguraçõesConfigurar o KatePart...+EdiçãoModo 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 KatePart, assim isto seria um suporte não tão trivial de qualquer maneira.

  • KatePart: 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 KatePart 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.

  • KatePart: Y copia até o fim da linha.

    Vim: Y copia toda a linha, como no yy.

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

  • KatePart: 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 freenode).

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 KatePart, permitindo que você execute muitos dos comandos disponíveis nas implementações do Vi bem como alguns específicos do KatePart. Para mais informações sobre estes comandos, veja “A Linha de Comando do Componente de Edição”. 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

Inserir

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

Excluir

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 Esquerda

Ir para a divisão da janela à esquerda

Ctrl+W, l

Ctrl+W Direita

Ir para a divisão da janela à direita

Ctrl+W, k

Ctrl+W Acima

Ir para a divisão da janela acima

Ctrl+W, j

Ctrl+W Abaixo

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

Esquerda

Esquerda

Backspace

Esquerda

j

Abaixo

Abaixo

Abaixo

k

Acima

Acima

Acima

l

Direita

Direita

Direita

Espaço

Direita

$

Fim da linha

End

Fim da linha

0

Primeiro caractere da linha (Coluna 0)

Início

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

%percentagem

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+Esquerda

Move para uma palavra à esquerda

Ctrl+Direita

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

Intervalos de objeto de texto de vírgula. Se o cursor está sobre o por exemplo 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 KatePart não é suportar 100% das funcionalidades do Vim.