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.


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.


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

7

bagaimana dengan:

:execute ':grep ' . foo

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 "=
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.