bagaimana cara menggunakan konten variabel sebagai argumen untuk perintah vim?

12

misalnya saya kira begitu

:let foo=pattern

dan sekarang saya ingin melakukan Ggrep pattertetapi menggunakan variabel foobukan patterstring literal .

:echo foo

output pattern, tetapi

:Ggrep foo

hanya mencari foo

MEMPERBARUI:

membangun string perintah dan kemudian menjalankan: mengeksekusi di atasnya bukanlah solusi, ini adalah hack. Dan itu rusak dengan nilai variabel non-sepele.

Vitaly Kushner
sumber
apa itu Ggrep(modal G?)?
akira
git grep dari plugin vim 'fugutive'
Vitaly Kushner
Contoh perintah salah. seharusnya dibiarkan foo = 'pattern'. Katakan bahwa: eksekusi adalah peretasan yang sama sekali salah. Itulah solusinya: Anda ingin vim mengevaluasi perintah sebelum menjalankannya
albfan

Jawaban:

2

Ini bukan tentang variabel tetapi mungkin perintah singkat vim dapat membantu. Coba dari baris perintah:

:abbreviate foo pattern

Kemudian

:Ggrep foo<space>

Ini akan melengkapi 'foo' ke 'pola' Anda.

alexche8
sumber
Sekarang coba lari echo foo. Opps echo patternyang bukan variabel. ini adalah retasan dan kesalahan arah.
albfan
7

bagaimana dengan:

:execute ':grep ' . foo
akira
sumber
bagaimana cara saya menghindari konten foo? mungkin berisi karakter khusus seperti ", ', /, \, dll
Vitaly Kushner
1
@Vitaly Kushner: Lihat ": help escape ()" dan ": help fnameescape ()".
garyjohn
Saya tahu escape (), tetapi tidak yakin tentang karakter apa yang harus melarikan diri
Vitaly Kushner
fnameescape () tidak baik, ini bukan argumen nama file, ini adalah argumen untuk fungsi plugin. misalkan saya: let foo = "aaa \" bbbb'cccc "
Vitaly Kushner
1
Saya mencabut rambut saya juga. Anda tidak dapat mengeluarkan perintah seperti let xyz = tabpagenr()itu tabnext xyz. Bahasa skrip Vim sama cacatnya dengan lingkungan modalnya sempurna.
puk
2

Jika Anda tidak menyukai :exesolusinya, Anda bisa "membaca" isi variabel ke dalam baris perintah dengan menggunakan =register ekspresi. Misalnya, ketik :Ggreplalu tekan Ctrl- rlalu ketik =foodan tekan Enter. Dengan asumsi variabel fooberisi "pola", baris perintah Anda sekarang akan terlihat seperti:

:Ggrep pattern

Ini memiliki keuntungan bahwa Anda dapat melihat perintah aktual yang akan dijalankan, dan bahkan memodifikasinya sebelum menekan Enterkedua kalinya.

Lihat:

:help "=
Heptite
sumber