Làm cách nào để sử dụng một biến trong biểu thức của lệnh 'bình thường'?


13

Làm thế nào người ta có thể sử dụng một biến khi thực hiện một cái gì đó thông qua normal!trong vimscript?

Thí dụ:

function! MyFunction(someArg)
   normal! (a:someArg)l
endfunction

Điều này sẽ di chuyển các someArgbước con trỏ sang phải.


4
bạn cần sử dụngexe "norm!" variable
Christian Brabandt

Câu trả lời:


21

Các executechức năng phải mất một chuỗi như là đối số, nó mở rộng chuỗi và thực hiện nó aa lệnh cũ thường xuyên. Do đó bạn có thể làm:

function! MyFunction(someArg) 
    execute "normal! ". a:someArg. "l" 
endfunction

Đây .là một toán tử vimscript tiêu chuẩn để nối chuỗi.

executecó thể rút ngắn thành exe.

Xem :h :execute


EDIT Tôi sẽ thêm một điểm về nhận xét của @Christian Brabandt về việc kết hợp với a ..

Tài liệu nói:

Nhiều đối số được nối, với một khoảng trắng ở giữa. Để tránh không gian thừa, hãy sử dụng dấu "." toán tử để nối các chuỗi thành một đối số.

Vì vậy, lệnh có thể là:

execute "normal!" a:someArg . "l"

Lệnh được thực thi sẽ là:

normal! 2l

8
bạn không cần '.'. exe sẽ nối các chuỗi với một khoảng trắng mà không có nó.
Christian Brabandt

1
@ChristianBrabandt Chờ nghiêm túc? Tôi không biết điều đó.
Tumbler41

@ChristianBrabandt Tôi không biết cảm ơn!
statox
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.