Как использовать переменное содержимое в качестве аргумента для команды vim?


12

например, предположим, что я сделал

:let foo=pattern

и теперь я хочу выполнить, Ggrep patterно использовать переменную fooвместо литеральной patterстроки.

:echo foo

выходы pattern, но

:Ggrep foo

просто ищет фу

ОБНОВИТЬ:

создать строку команды и затем выполнить: выполнить ее не решение, это взломать. И это ломается с любыми нетривиальными значениями переменных.


что такое Ggrep(заглавная G?)?
Акира

git grep из плагина vim 'fugutive'
Виталий Кушнер,

Пример команды неверен. это должно быть позволено foo = 'pattern'. Скажите, что: выполнить это взломать совершенно неправильно. Вот решение: вы хотите, чтобы vim оценил команду перед ее выполнением
albfan

Ответы:


2

Дело не в переменной, но, возможно, команда vim abbreviate может помочь. Попробуйте из командной строки:

:abbreviate foo pattern

потом

:Ggrep foo<space>

Это завершит «foo» для вашего «шаблона».


Теперь попробуй запустить echo foo. Оппс echo patternкоторый не является переменной. это взломать и ввести в заблуждение.
Альбфан

7

как насчет:

:execute ':grep ' . foo

как мне правильно избежать содержимого foo? он может содержать специальные символы, такие как ", ', /, \ и т. д.
Виталий Кушнер,

1
@Vitaly Kushner: Смотрите ": help escape ()" и ": help fnameescape ()".
garyjohn

Я знаю escape (), но не уверен насчет того, каких персонажей бежать
Виталий Кушнер

fnameescape () не подходит, это не аргумент имени файла, это функция arg to plugin. предположим, я: let foo = "aaa \" bbbb'cccc "
Виталий Кушнер

1
Я тоже тяну волосы за это. Вы не можете выполнить команду, как let xyz = tabpagenr()тогда tabnext xyz. Язык сценариев Vim столь же несовершенен, как и его модальная среда.
Пук

2

Если вам не нравится :exeрешение, вы можете «прочитать» содержимое переменной в командную строку, используя =регистр выражений. Например, введите, :Ggrepзатем нажмите Ctrl-, rа затем введите =fooи нажмите Enter. Предполагая, что переменная fooсодержит «pattern», ваша командная строка должна выглядеть так:

:Ggrep pattern

Это имеет то преимущество, что вы можете видеть фактическую команду, которая будет выполняться, и даже изменять ее перед Enterповторным нажатием .

Увидеть:

:help "=
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.