como uso um conteúdo variável como argumento para o comando vim?

12

por exemplo, suponha que eu fiz

:let foo=pattern

e agora eu quero executar, Ggrep pattermas use a variável em foovez da patterstring literal .

:echo foo

saídas pattern, mas

:Ggrep foo

apenas procura foo

ATUALIZAR:

construindo uma cadeia de comando e depois executando: executar nela não é uma solução, é um hack. E ele quebra com qualquer valor de variável não trivial.

Vitaly Kushner
fonte
o que é Ggrep(G maiúsculo)?
akira
git grep do 'fugutive' vim plugin
Vitaly Kushner
comando de exemplo está errado. deve ser deixado foo = 'padrão'. Diga o seguinte: execute is a hack está totalmente errado. Essa é a solução: Você quer vim para avaliar o comando antes de executá-lo
albfan

Respostas:

2

Não se trata de variável, mas talvez o comando vim abreviado possa ajudar. Tente na linha de comando:

:abbreviate foo pattern

Então

:Ggrep foo<space>

Ele completará 'foo' no seu 'padrão'.

alexche8
fonte
Agora tente correr echo foo. Opps echo patternque não é uma variável. isso é um truque e equivocado.
albfan
7

A respeito:

:execute ':grep ' . foo
akira
fonte
como escapar adequadamente do conteúdo do foo? pode conter caracteres especiais como ", ', /, \, etc.
Vitaly Kushner
1
@Vitaly Kushner: Veja ": help escape ()" e ": help fnameescape ()".
garyjohn
Eu sei escapar (), mas não tenho certeza sobre o que personagens de escapar
Vitaly Kushner
fnameescape () não é bom, não é um argumento de nome de arquivo, é uma função arg para plugin. suponha que eu: que foo = "aaa \" bbbb'cccc"
Vitaly Kushner
1
Também estou puxando meu cabelo por causa disso. Você não pode emitir um comando como let xyz = tabpagenr()então tabnext xyz. A linguagem de script do Vim é tão falha quanto seu ambiente modal é impecável.
1/12
2

Se você não gostar da :exesolução, poderá "ler" o conteúdo de uma variável na linha de comando usando o =registro de expressão. Por exemplo, digite :Ggrepe pressione Ctrl- re digite =fooe pressione Enter. Assumindo que a variável foocontinha "padrão", sua linha de comando agora deve se parecer com:

:Ggrep pattern

Isso tem a vantagem de poder ver o comando real que será executado e até modificá-lo antes de pressionar Enteruma segunda vez.

Vejo:

:help "=
Heptite
fonte