jak użyć zmiennej treści jako argumentu dla polecenia vim?

12

na przykład załóżmy, że tak

:let foo=pattern

a teraz chcę wykonać, Ggrep patterale używam zmiennej foozamiast literału patter.

:echo foo

wyjścia pattern, ale

:Ggrep foo

po prostu szuka foo

AKTUALIZACJA:

zbudowanie ciągu poleceń, a następnie uruchomienie: wykonanie na nim nie jest rozwiązaniem, to hack. I łamie się z dowolnymi nietrywialnymi wartościami zmiennych.

Witalij Kushner
źródło
co to jest Ggrep(litera G?)?
akira,
git grep z wtyczki vim „fugutive”
Vitaly Kushner,
przykładowe polecenie jest niepoprawne. należy pozwolić foo = „wzorzec”. Powiedz, że: wykonanie jest włamaniem jest całkowicie błędne. Oto rozwiązanie: chcesz, aby vim ocenił polecenie przed jego wykonaniem
albfan,

Odpowiedzi:

2

Nie chodzi o zmienną, ale może pomocne może być skrócone polecenie vim. Spróbuj z wiersza poleceń:

:abbreviate foo pattern

Następnie

:Ggrep foo<space>

Uzupełni to „foo” do twojego „wzorca”.

alexche8
źródło
Teraz spróbuj uruchomić echo foo. Opps, echo patternktóry nie jest zmienną. to jest hack i mylące.
albfan,
7

co powiesz na:

:execute ':grep ' . foo
akira
źródło
jak właściwie uciec od treści foo? może zawierać znaki specjalne, takie jak „,”, /, \ itd.
Witalij Kushner,
1
@Vitaly Kushner: Patrz „: help escape ()” i „: help fnameescape ()”.
garyjohn
Znam ucieczkę (), ale nie jestem pewien, jakie postacie uciec
Witalij Kushner,
fnameescape () nie jest dobry, nie jest argumentem nazwy pliku, jest funkcją arg to pluginu. załóżmy, że: niech foo = "aaa \" bbbb'cccc "
Witalij Kushner,
1
Ciągnę też za to włosy. Nie można wydać polecenie, jak let xyz = tabpagenr()wtedy tabnext xyz. Język skryptowy Vima jest tak samo wadliwy, jak jego środowisko modalne jest bezbłędne.
puk
2

Jeśli nie podoba ci się to :exerozwiązanie, możesz „odczytać” zawartość zmiennej do wiersza poleceń za pomocą =rejestru wyrażeń. Na przykład wpisz, :Ggrepa następnie naciśnij Ctrl-, ra następnie wpisz =fooi naciśnij Enter. Zakładając, że zmienna foozawierała „wzorzec”, linia poleceń powinna teraz wyglądać następująco:

:Ggrep pattern

Ma to tę zaletę, że można zobaczyć rzeczywiste polecenie, które zostanie uruchomione, a nawet zmodyfikować je przed ponownym naciśnięciem Enter.

Widzieć:

:help "=
Heptyt
źródło