Làm cách nào để sử dụng một nội dung biến làm đối số cho lệnh vim?


12

ví dụ giả sử tôi đã làm

:let foo=pattern

và bây giờ tôi muốn thực hiện Ggrep patternhưng sử dụng biến foothay vì patterchuỗi ký tự.

:echo foo

đầu ra pattern, nhưng

:Ggrep foo

chỉ tìm foo

CẬP NHẬT:

xây dựng một chuỗi lệnh và sau đó chạy: thực thi trên nó không phải là một giải pháp, đó là một hack. Và nó phá vỡ với bất kỳ giá trị biến không tầm thường.


là gì Ggrep(vốn G?)?
akira

git grep từ plugin vim 'fugutive'
Vitaly Kushner

lệnh ví dụ là sai. nên để foo = 'mẫu'. Nói rằng: thực thi là một hack là hoàn toàn sai. Đó là giải pháp: Bạn muốn vim đánh giá lệnh trước khi thực hiện nó
albfan

Câu trả lời:


2

Nó không phải là về biến nhưng có lẽ lệnh viết tắt vim có thể giúp đỡ. Thử từ dòng lệnh:

:abbreviate foo pattern

Sau đó

:Ggrep foo<space>

Nó sẽ hoàn thành 'foo' theo 'mẫu' của bạn.


Bây giờ hãy thử chạy echo foo. Opps echo patternmà không phải là một biến. Đây là một hack và sai lầm.
albfan

7

Thế còn:

:execute ':grep ' . foo

Làm thế nào để tôi thoát khỏi nội dung của foo? nó có thể chứa các ký tự đặc biệt như ", ', /, \, v.v.
Vitaly Kushner

1
@Vitaly Kushner: Xem ": help esc ()" và ": help fnameescape ()".
garyjohn

Tôi biết thoát (), nhưng không chắc chắn về những nhân vật sẽ trốn thoát
Vitaly Kushner

fnameescape () không tốt, nó không phải là đối số tên tệp, là đối số của hàm đối với plugin. giả sử tôi: let foo = "aaa \" bbbb'cccc "
Vitaly Kushner

1
Tôi cũng đang kéo tóc ra. Bạn không thể đưa ra một lệnh như let xyz = tabpagenr()sau đó tabnext xyz. Ngôn ngữ kịch bản của Vim hoàn hảo như môi trường phương thức của nó là hoàn hảo.
puk

2

Nếu bạn không thích :exegiải pháp, bạn có thể "đọc" nội dung của biến vào dòng lệnh bằng cách sử dụng =thanh ghi biểu thức. Ví dụ, nhập :Ggrepsau đó nhấn Ctrl- rvà sau đó nhập =foovà nhấn Enter. Giả sử biến foochứa "mẫu", dòng lệnh của bạn sẽ trông như sau:

:Ggrep pattern

Điều này có lợi thế là bạn có thể thấy lệnh thực tế sẽ được chạy và thậm chí sửa đổi nó trước khi nhấn Enterlần thứ hai.

Xem:

:help "=
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.