簡體   English   中英

如何在循環函數中執行 Vim 命令

[英]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:1a: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM