[英]How to execute Vim commands in looped functions
我正在嘗試編寫 function 以簡化在 Vim 中切換 windows 的命令。 我已經設法讓它作為:W <argument>
工作:
function! s:winswitch(...)
let i = 0
while i < argc()
let command = ":wincmd ".a:1
execute command
let i = i + 1
endwhile
endfunction
command! -nargs=+ W call s:winswitch(<f-args>)
這適用於制作:W l
function 為:wincmd l
。
我正在尋找一種方法來執行基於任意數量的 arguments 的命令,例如我可以使用:W jh
到 function 作為:wincmd j|wincmd h
。
您的代碼中的問題出在argc()
中——它不將 arguments 計入 function,而是將文件 arguments 計入命令行。 運行代碼時很可能argc()
為 1,因此循環只執行一次。
要將 arguments 計數到 function 使用a:0
而不是argc()
:
while i < a:0
let command = ":wincmd " . a:000[i]
除了單獨的 a a:000
a:1
、 a:2
、 (...)
如果您從:while
切換到:for
循環,您實際上不需要使用長度(通過a:0
,而不是argc()
!)和顯式索引:
for arg in a:000
let command = 'wincmd ' . arg
如果由於某種原因您需要使用索引,我仍然更喜歡:for
:
for i in range(a:0)
let command = 'wincmd ' . a:000[i]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.