Como abrir um arquivo no VIM e mover o cursor para o resultado da pesquisa

3

Considere o arquivo tmp.txt cujo conteúdo é:

x
abcd

Eu quero abri-lo no VIM e mover o cursor para o caractere c . Então eu executo o VIM com os argumentos:

$ vim -c "/c" tmp.txt

Mas define o cursor em a . Parece que o VIM conseguiu encontrar c , mas colocou o cursor na linha começar. Por que funciona diferente se eu executar /c no modo normal do VIM quando o arquivo estiver aberto?

    
por ka3ak 05.07.2016 / 19:47

2 respostas

4

Você pode posicionar o cursor na primeira correspondência usando a opção -s (script). De acordo com o manual do vim :

-s {scriptin}
The script file {scriptin} is read. The characters in the file are interpreted as if you had typed them. The same can be done with the command ":source! {scriptin}". If the end of the file is reached before the editor exits, further characters are read from the keyboard.

Você pode usar um arquivo temporário com as combinações de teclas ou até mesmo (se estiver usando bash ) substituição de processo. Por exemplo:

#!/bin/bash
vim -s <(printf '/c\n') tmp.txt

Esta abordagem funciona com pesquisas mais complicadas do que um único caractere.

    
por 06.07.2016 / 01:20
0

Primeira tentativa

Eu considerei usar a opção de comando +/ que está documentada na página man como

+/{pat} – For the first file the cursor will be positioned on the first occurrence of {pat}.

No entanto, a descrição na página man é enganosa, isto é, o cursor é colocado no primeiro caractere da primeira linha que contém o padrão de pesquisa, semelhante ao modo como a pesquisa funciona ao usar comandos ex baseados em linha.

Atualização: A partir do Vim 8.1, sua página man foi atualizada para refletir o comportamento real desta opção:

For the first file the cursor will be positioned in the line with the first occurrence of {pat}

Solução de trabalho

Uma solução melhor é usar a opção -c com :execute (necessária para que \n possa ser usado para passar um caractere de nova linha para o comando :normal ) para realizar a pesquisa como se você já tinha o Vim aberto no modo Normal.

Solução geral:

vim -c 'execute "normal /pattern\n"' filename

Solução para o exemplo acima:

vim -c 'exe "norm /c\n"' tmp.txt
    
por 05.07.2016 / 23:35

Tags