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.


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”.


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

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 "=
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.