2010-10-14 41 views
0

在當前緩衝區中,我有一個文件路徑列表(每行一個)。我想將「參數」設置爲該文件列表。如何將「args」設置爲當前緩衝區的文件列表

我該怎麼做? 謝謝。

+0

你需要爲這個腳本,或者是一個映射OK,或者只是一個手動指令? – 2010-10-14 16:11:20

+0

最快的方法是:g/\ v(。*)/ arga \ 1或者somet hing那樣 – kaptux 2010-10-14 16:28:17

+0

我覺得這是你要找的命令'g/^/exe「arga」.getline('。')' – 2010-12-16 00:01:19

回答

0
:execute "args ".join(map(getline(1, line('$')), 'fnameescape(v:val)'))<CR> 

說明:getline(1, line('$'))將返回當前緩衝區行的列表(從第一個(1)到最後(line('$'))線,map(getline(1, line('$')), 'fnameescape(v:val)')會逃跑的情況下,所有文件名包含空格或其他特殊字符, join(...)會,那麼它會傳遞給args命令通過execute通過將每兩個列表項之間的空間加入結果列表。

+0

很好的迴應。事實上,我試圖學習一些「vim腳本」,這個答案給了我很多有趣的概念。非常感謝! – kaptux 2010-10-14 21:08:54

+0

總之,你可以使用「getline(1,'$')」而不是「getline(1,line('$'))」(至少在gvim 7.3中) – kaptux 2010-10-14 21:21:43

+0

@kaptux>總之你可以使用「getline 1,'$')「而不是」getline(1,line('$'))「(至少在gvim 7.3中)///我知道這個,但我經常忘記它,因爲接受行號的其他函數不接受行表達式:例如,嘗試任何'syn *'函數。在所有情況下使用'line()'是安全的。 – ZyX 2010-10-14 21:40:34

1

嘗試這一系列命令:ggVGJ"ayy:args然後按下Ctrl-R,然後

ExplanantionggVGJ將加入所有的行成一條線。 "ayy會將新的單行插入到註冊表中。 :args (filenames)將設置參數,Ctrl-r, a將把寄存器a的內容放入您當前正在輸入的命令中。

如果您不想搞亂當前的緩衝區(您正在編輯的文件),那麼首先將所有行放入空白臨時緩衝區。

+0

很棒的回覆。我不知道Ctrl-r commad將一個寄存器的內容放入命令行,但對於具有空格的路徑,其他響應完美地運行。謝謝。 – kaptux 2010-10-14 21:04:57

相關問題