Quero escrever um comando que especifica "a palavra sob o cursor" no VIM. Por exemplo, digamos que tenho o cursor sobre uma palavra e a faço aparecer duas vezes. Por exemplo, se a palavra for "abc" e eu quiser "abcabc", posso digitar:
:s/\(abc\)/\1\1/
Mas então eu gostaria de poder mover o cursor para "def" e usar o mesmo comando para alterá-lo para "defdef":
:s/\(def\)/\1\1/
Como posso escrever o comando na linha de comando para que ele faça isso?
:s/\(*whatever is under the commandline*\)/\1\1
fonte
yiw
maisbyw
só por causa de memória muscular. No cenário em que o cursor já está no primeiro caractere da palavra, você deve omitir ob
e simplesmente digitaryw
vs você pode omitir oi
inyiw
. Acidentes podem acontecer, e consertar um erro certamente requer mais pressionamentos de teclas :)Enquanto estiver no modo de linha de comando, CTRL+ R CTRL+ Wirá inserir a palavra sob o cursor.
Consulte a ajuda para
c_CTRL-R
obter uma lista de todos os outros registros especiais:fonte
yiw
: Yank palavra interna (a palavra sob o cursor). Este comando também move o cursor para o início da palavra.P
: Cole antes do cursor.Você pode então mapear o exemplo:
< ALT > - D
para este comando:fonte
Outra maneira fácil de fazer isso é usar o
*
comando.No modo normal, ao falar sobre uma palavra, digite
*
torna o padrão de pesquisa a palavra atual (por exemplo, \ <abc \>).:s//
faz uma substituição usando o padrão de pesquisa atual, e\0
na seção de substituição está a string correspondente.Você pode então repetir este comportamento, dizer sobre a palavra "def", digitando o mesmo novamente ou digitando
@:
apenas repete o último comando ex, sem a necessidade de um <Enter>, neste caso a substituição.Você também pode gravar uma macro rápida para fazer isso usando o
q
comandoEm seguida, repita o que quiser digitando
quando sobre uma palavra você deseja dobrar. Como este é apenas um caractere a menos que a solução anterior, pode não valer a pena para você - a menos que você esteja fazendo outros ex-comandos entre a duplicação de palavras, o que mudaria o comportamento de
@:
fonte
Você precisa escapar das barras invertidas no mapeamento. Você também pode incluir a string de substituição no mapeamento.
fonte
fará o que você descreve.
também avançará o cursor para a próxima palavra.
fonte
@ user11211 tem a maneira mais direta de duplicar a palavra sob o cursor:
arrancar a palavra interna (move o cursor para o início da palavra), colar (antes do cursor).
por exemplo. direto [t] direto ----> direto [d] direto
[] é o cursor
Para elaborar...
Você provavelmente deseja que o cursor acompanhe a palavra duplicada:
direto [t] direto ----> direto direto []
NOTA:
é a palavra interna arrancada (sem espaço em branco)
é arrancar todas as palavras (incluindo espaços em branco à direita).
é, portanto, uma palavra duplicada, incluindo espaço em branco e cursor de posição.
direto [t] direto ----> direto direto []
fonte
fonte
n
sinalizador para o:substitute
comando para imprimir quantas vezes a palavra sob o cursor aparece no buffer atual. Muito inteligente, mas não é realmente uma resposta a essa pergunta.