Vim/Usando registros
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.
- O registro sem nome ""
- 10 registros nomeados de "0 a 9"
- O registro de pequenas deleções "-
- 26 registros nomeados de "a até z" ou de "A até Z"
- 4 registros somente leitura
- O registro de expressões "=
- Os registro de seleção e arrastar "*, "+ e "~
- O registro "buraco negro"
- Registro do último padrão de busca "/
O registro sem nome ""
editarArmazena 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
editarO 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
editarQuando 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'
editarVocê 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 "_
editarUse 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 "/
editarSe 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
editarDigitando o comando
:reg
ou ainda
:ls
O vim mostrará os registros numerados e nomeados atualmente em uso
Listando arquivos abertos
editarSuponha 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?
editarInicie 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?
editarBom, 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?
editarControl-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'