題 在Vim中的光標下創建一個文件


我有一個文件列表

file1.ext
file2.ext
...

如果我的光標位於file2.ext中,如何使用file2.ext名稱創建文件。有一些像 gf 僅用於創建新文件(這是一個假設的情況,只是覺得有一天可能會有所幫助)。


10
2018-04-29 05:40


起源




答案:


我想到的第一件事是使用 touch 命令將光標下的文件名傳遞給它。

map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

但是有一個Vim內部解決方案應該是可移植的 平台。功能 writefile 將列表寫入文件行 線。當輸入列表為空時,它會創建一個空文件。 (看到 :help writefile 詳情。)

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

請注意,可以使用不同的方式調整文件名提取 expand 模式(見 :help expand())。

順便說一下,如果你不想創建一個文件,而是打開一個文件 編輯,你可以定義 gf類似的映射

map <leader>gf :e <cfile><cr>

哪裡 :e 可以替換為 :tabe 或類似的東西。


17
2018-04-29 07:43



教學+1 <cfile> 代替 <C-r><C-f> - sehe


我從上面的ib那裡得到了優秀的答案並將其擴展如下。我的目標是使用vim根據維基需要創建新的markdown文件(在本例中為Gollum wiki)

我第一次嘗試:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

上述內容確實如答案所述。但是,起初我認為它不起作用,因為我實際上沒有看到文件在vim中打開。使用下面的第二位代碼將打開一個新文件 - 這是我正在尋找的更多。所以我把它們結合起來試了一下

map <leader>cf :e <cfile><cr>

但這對於wiki不起作用,因為當你嘗試使用類似語法在wiki中創建一個新文件時 [[the-new-file]] wiki語法不允許在括號中擴展文件。但是,在創建新文件時,Vim需要知道擴展名。在這種情況下我用過:

    map <leader>cf :e <cfile>.md<cr>

所以我可以創建新的降價文件。有一些方法可以進一步定制它(例如,不通過硬編碼擴展),但上述工作正常,我的需要。如果我需要另一個擴展名(例如保存.wiki文件),我可能會採用簡單的路線並製作另一個地圖,例如:

    map <leader>cwf :e <cfile>.wiki<cr>

作為附帶好處,您可以使用相同的命令打開現有的markdown文件(標準 gf 命令在此處不起作用,因為缺少文件擴展名)。


2
2017-12-29 20:47



gf 如果 set suffixesadd=.wiki。你的改進版 cf 將是一個尊重的人 suffixesadd,至少在它只包含一個項目的情況下。 - hjdivad