Vim/Usando registros

< Vim

O vim possui nove tipos de registros, cada tipo tem uma utilidade específica, por exemplo você pode usar um registro que guarda o último comando digitado, pode ainda imprimir dentro do texto o nome do próprio arquivo, vamos aos detalhes.

  1. O registro sem nome ""
  2. 10 registros nomeados de "0 a 9"
  3. O registro de pequenas deleções "-
  4. 26 registros nomeados de "a até z" ou de "A até Z"
  5. 4 registros somente leitura
  6. O registro de expressões "=
  7. Os registro de seleção e arrastar "*, "+ e "~
  8. O registro "buraco negro"
  9. Registro do último padrão de busca "/


O registro sem nome "" editar

Armazena o conteúdo de ações como:

 d ............ deleção
 s ............ substituição
 c ............ um outro tipo de modificação
 x ............ apaga um caractere
 yy ........... copia uma linha inteira

Para acessar o conteúdo deste registro basta usar as letras p ou P que na verdade são comandos para colar abaixo da linha atual e acima da linha atual (em modo normal)

Registros nomeados de 0 a 9 editar

O registro zero armazena o conteúdo da última cópia 'yy', à partir do registro 1 vão sendo armazenadas as deleções sucessivas de modo que a mais recente deleção será armazenada no registro 1 e os registros vão sendo incrementados em direção ao nono.

Deleção menores que uma linha não são armazenadas nestes registros, caso em que o vim usa o registro de pequenas deleções ou que se tenha especificado algum outro registro. Para saber mais exceções para este registro leia o manual "change.txt" à partir da linha 1011.

:help registers

Registro de pequenas deleções editar

Quando você deleta algo menor que uma linha o vim armazena os dados deletados neste registro.

Registros nomeados de 'a até z' ou 'A até Z' editar

Você pode armazenar uma linha em modo normal assim:

   "ayy

Desse modo você guardou o conteúdo da linha no registro 'a' caso queira armazenar mais uma linha no registro 'a' use este comando

    "Add

Neste outro caso apaguei a linha corrente adicionando-a ao final do registro 'a'.

Registros somente leitura ":, "., "% e "# editar

":  ...................... armazena o último comando 
".  ...................... armazena uma cópia do último texto inserido
"%  ...................... contém o nome do arquivo corrente
"#  ...................... contém o nome do arquivo alternativo

Uma forma prática de usar registros em modo insert é usando Control-r

Observação: lembre-se que no vim o circunflexo representa (nos atalhos) a tecla control.

 ^r%  ............. insere o nome do arquivo atual
 ^r:  ............. insere o último comando digitado
 ^r/  ............. insere a última busca efetuada

Em modo insert você pode repetir a última inserção de texto simplesmente pressionando

  Control-a

Registro de expressões editar

 "=

Este registro na verdade é usando em algumas funções avançadas

Registros de arrastar e mover editar

  "*, "+ and "~ 

Use estes registros para armazenar e recuperar textos em modo gráfico veja 'quotestar' e 'quoteplus', quando a área de transferência não está disponível ou funcional.

Registro buraco negro "_ editar

Use este registro quando não quiser alterar os demais registros, por exemplo: se você deletar a linha atual,

   dd

Esta ação irá colocar a linha atual no registro numerado 1, caso não queira alterar o conteúdo do registro 1 apague para o buraco negro assim:

 "_dd

Registros de buscas "/ editar

Se desejar inserir em uma substituição uma busca prévia, você poderia fazer assim em modo de comandos:

Observação: veja que estou trocando o delimitador da busca para deixar claro o uso do registro de buscas "/"

  :%s,<control-r>,novo-texto,g

Manipulando registros editar

:let @/=@+              : coloca no registro de buscas o conteúdo da Área de Transferência
:@+                     : Executa como comando o conteúdo da Área de Transferência (bom pra testar scripts)
:let @a=@_              : limpa o registro a
:let @a=""              : limpa o registro a
:let @a=@"              : salva registro sem nome *N*
:let @*=@a              : copia o registro para o buffer de colagem
:let @*=@:              : copia o ultimo comando para o buffer de colagem
:let @*=@/              : copia a última busca para o buffer de colagem
:let @*=@%              : copia o nome do arquivo para o buffer de colagem
:reg                    : mostra o conteúdo de todos os registros

Em modo insert

<C-R>-                  : Insere o registro de pequenas deleções (also insert mode)
<C-R>[0-9a-z]           : Insere registros 0-9 e a-z (also insert mode)
<C-R>%                  : Insere o nome do arquivo (also #) (also insert mode)
<C-R>=somevar           : Insere o conteúdo de uma variável qualquer (eg :let sray="ray[0-9]")


Você pode manter registros pré-carregados assim:

" Using a register as a map (preload registers in .vimrc)
:let @m=":'a,'bs/"
:let @s=":%!sort -u"

Outro exemplo: pré-carregando o nome do arquivo no registro 'n'

coloque em seu ~/.vimrc

 :let @n=@%

Como foi atribuído ao registro 'n' o conteúdo de @%, ou seja, o nome do arquivo, você pode fazer algo assim em modo insert:

   control-r-n

E o nome do arquivo será inserido

Listando os registros atuais editar

Digitando o comando

 :reg

ou ainda

:ls

O vim mostrará os registros numerados e nomeados atualmente em uso

Listando arquivos abertos editar

Suponha que você abriu vários arquivos txt assim:

vim *.txt

Para listar os arquivos aberto faça:

:buffers

Usando o comando acima o vim exibirá a lista de todos os arquivos abertos, após exibir a lista você pode escolher um dos arquivos da lista, algo como:

:buf 3

Para editar arquivos em sequência faça as alterações no arquivo atual e acesso o próximo assim:

:wn

O comando acima diz 'grave' --> w e próximo 'next' --> n

Dividindo a janela com o próximo arquivo da lista de buffers editar

:sn

O comando acima é uma abreviação de 'split next', ou seja, dividir e próximo.

Como colocar um pedaço de texto em um registro? editar

<esc> .................. vai para o modo normal
"a10j .................. coloca no registro 'a' as próximas 10 linhas '10j'

Para usar você pode:

<esc> .................. para ter certeza que está em modo normal
"ap .................... registro a 'paste', ou seja, cole

Em movo inserte faça:

control-r-a

Como criar um registro em modo visual? editar

Inicie a selecão visual com o atalho

 control-v

pressione a letra 'j' até chegar ao ponto desejado, agora faça

 "ay

pressione 'v' para sair do modo visual

Como definir um registro no vimrc? editar

Bom, você pode criar uma variavel no vim assim:

:let var="texto"
:echo var

Pode também dizer ao vim algo como...

:let @d=strftime("%c")<enter>

Neste cado estou dizendo a ele que guarde na variável 'd' at d, o valor da data do sistema 'strftime("%d-%m-%Y %H:%M")'

Então cole isto no vimrc

 let @d=strftime("%d-%m-%Y %H:%M")<cr>

Pode mapear tudo isto

:let @d=strftime("%d-%m%Y %H:%M")<cr>
:imap ,d <cr>rd
:nmap ,d "dp

As atribuições acima correspodem a:

1 - guarda a data na variável 'd'
2 - mapemento para o modo insert 'imap' (digite ,d)
3 - mapeamento para o modo normal 'nmap' (digite ,d)

E digitar ,d normalmente

Desmistificando o strftime

" d=dia m=mes Y=ano H=hora M=minuto

e inserir em modo normal assim:

"dp

ou usar em modo insert assim

Control-r-d

Como selecionar blocos verticais de texto? editar

 Control-v

agora use as letras h,l,k,j como setas de direção até finalizar podendo guardar a seleção em um registro que vai de 'a' a 'z' exemplo:

 "ay

Em modo normal você pode fazer assim para guardar um parágrafo inteiro em um registro

 "ayip

O comando acima quer dizer

 para o registro 'a'  "a
 copie 'y'
 o parágrafo atual 'inner paragraph'

Referências editar