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 ""
[editar | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]": ...................... 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 | editar código-fonte]"=
Este registro na verdade é usando em algumas funções avançadas
Registros de arrastar e mover
[editar | editar código-fonte]"*, "+ 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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]: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 | editar código-fonte]Digitando o comando
:reg
ou ainda
:ls
O vim mostrará os registros numerados e nomeados atualmente em uso
Listando arquivos abertos
[editar | editar código-fonte]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 | editar código-fonte]: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 | editar código-fonte]<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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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'