як я можу використовувати змінний вміст як аргумент для команди vim?


12

наприклад, припустимо, що я зробив

:let foo=pattern

і тепер я хочу виконати, Ggrep patterале використовувати змінну fooзамість буквального patterрядка.

:echo foo

виходи pattern, але

:Ggrep foo

просто шукає foo

ОНОВЛЕННЯ:

складання рядка команд і потім запуску: виконувати на ньому не рішення, а хак. І він розривається з будь-якими нетривіальними значеннями змінної.


що таке Ggrep(капітал G?)?
акіра

git grep з плагіну vim "vgutive"
Віталій Кушнер

команда example неправильна. це нехай foo = 'pattern'. Скажіть, що: Execute - це злом, абсолютно неправильно. Ось таке рішення: Ви хочете, щоб vim оцінив команду перед її виконанням
albfan

Відповіді:


2

Йдеться не про змінну, але, можливо, може допомогти скорочена команда vim. Спробуйте з командного рядка:

:abbreviate foo pattern

Потім

:Ggrep foo<space>

Він доповнить "foo" до вашого "шаблону".


Тепер спробуйте запустити echo foo. Opps, echo patternщо не є змінною. це злом і оману.
альффан

7

а як на рахунок:

:execute ':grep ' . foo

як я правильно уникати вмісту foo? він може містити спеціальні символи, такі як ",", /, \ тощо.
Віталій Кушнер

1
@ Віталій Кушнер: Дивіться ": help help ()" та ": help fnameescape ()".
garyjohn

Я знаю втечу (), але не впевнений, з яких героїв втекти
Віталій Кушнер

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

1
Я теж витягаю волосся над цим. Ви не можете видавати таку команду, як let xyz = tabpagenr()тоді tabnext xyz. Мова сценаріїв Vim така ж недосконала, як і бездоганна модальна середовище.
puk

2

Якщо рішення вам не подобається :exe, ви можете "прочитати" вміст змінної в командний рядок, скориставшись =регістром виразів. Наприклад, введіть :Ggrepпотім натисніть Ctrl-, rа потім введіть =fooі натисніть Enter. Якщо припустити змінну, що fooмістить "шаблон", тепер ваш командний рядок повинен виглядати так:

:Ggrep pattern

Це має перевагу в тому, що ви можете побачити фактичну команду, яка буде виконуватися, і навіть змінити її перед тим, як натиснути Enterдругий раз.

Побачити:

:help "=
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.