2011-02-26 64 views
1

我知道這是一個初學者的問題!假設我們有兩個目錄:在Vim中,打開一個與當前文件名相同的文件,但在另一個目錄中

recipes/ 
    apple-pie.txt 
    blueberry-muffin.txt 
disaster-stories/ 
    apple-pie.txt 
    blueberry-muffin.txt 

讓我們也假設Vim的當前目錄設置爲父目錄都recipes/disaster-stories/

問:

如果我編輯recipes/apple-pie.txt,我希望能夠進入一個自定義的命令,如:dsstr,造成當前文件保存和disaster-stories/apple-pie.txt被打開。我怎麼能這樣做?

+0

@Robert感謝您的編輯。 – ClosureCowboy

+0

爲什麼不試試::w disaster-stories/apple-pie。txt –

+0

我可以,也許我應該。但我認爲能夠跳轉到相應的文件而不必每次指定其名稱都會很方便。 – ClosureCowboy

回答

4

您可以鏈命令:執行

  • expand():見。

    :w | e disaster-stories/apple-pie.txt

    Vim會擴大%在命令行命令將當前編輯的文件名。您可以添加一些修飾符以不同方式操作文件名(請參閱手冊中的filename modifiers)。例如,%:t是文件名的尾部(最後一個部分);如果%給出recipes/apple-pie.txt%:t給出apple-pie.txt

    :w | e disaster-stories/%:t

    通常當我想要做這種事情,我不使用自定義鍵綁定打擾。如果您最近使用過這樣的命令,則可以鍵入它的前綴(:w |),並使用向上箭頭鍵方便地從歷史記錄中調用它。

  • +0

    +1我不知道關於'|'或關於'%t'的信息。謝謝!這似乎是一個非常好的解決方案,無論它是否是單一命令。 – ClosureCowboy

    1

    編輯:好的,我有你的解決方案。我不確定如何在vim中編寫函數,但是您可以編寫一個shell腳本來爲您完成這項工作。我試圖編寫一個腳本來保存當前文件,退出,而不是切換到新文件,但遇到了一些錯誤。但是這隻允許你輸入:

    :w | ! scriptName 
    

    !告訴vim運行諸如「cd」或「ls」的命令。

    步驟使shell腳本:
    -CD
    -mkdir斌(如果本不存在的〜)
    -CD斌< - 你想使腳本在〜/ bin中這樣Linux可以找到它 -vim nameOfScript(這就是你要輸入的命令來運行命令,例如,如果你命名爲「vimScript」,它會運行你輸入的「vimScript」,理想情況下你會想使用像「vc 「(VIM變化)

    - 輸入以下文字:
    #/斌/慶典
    vim -c e {)

    - 注意:第一行,#!/ bin/bash告訴Unix/Linux這是一個腳本。 vim -c e pathToFile使其運行命令「vim -c e pathToFile」 -save並退出
    -chmod + x nameOfscript < - 這使得腳本可執行
    - 享受!現在,您可以現在就可以保存文件,然後通過鍵入移動到下一個:

    :w | ! nameOfScript 
    

    值得注意的幾件事情:這種方法只適用的一種方式。您需要編寫兩個單獨的命令,一個用於切換到一個文件,另一個用於切換到另一個文件,或者添加更多的命令到腳本中。增加更多是最好的方法,因爲它可以讓你更容易地在以後添加更多的文件。

    此外,我會建議做兩個文件的備份,以防萬一你創建腳本時出錯。

    如果您有任何疑問,只需詢問!下面的一些更多的鏈接:

    這裏是編寫shell腳本一些鏈接:
    http://linuxcommand.org/wss0010.php
    http://linuxcommand.org/writing_shell_scripts.php
    http://www.freeos.com/guides/lsst/

    而且,這兩個環節可以在將來證明是有益的:

    http://vimhelp.appspot.com/vim_faq.txt.html
    http://vim.wikia.com/wiki/Vim_Tips_Wiki

    +0

    謝謝你的鏈接。您的解決方案是否允許我避免每次輸入文件的名稱? – ClosureCowboy

    +0

    原來的一個沒有,但看到我的編輯 – Wipqozn

    3

    將這個對你的vimrc:

    command! -bar Dsstr w|exec 'edit '.expand('%:p:h:h').'/disaster-stories/'.expand('%:t')

    然後你可以使用:Dsstr更改該文件。

    這根本不靈活,但我不確定你需要什麼,所以我不能再走了。

    編輯 現在的簡短說明並指出了Vim的幫助,瞭解詳情:

    • command!:創建一個命令,如果它存在覆蓋。 :help:command
    • -bar:Allow |連接命令。 :h:命令欄
    • Dsstr:用戶命令必須以大寫字母開頭。
    • w|:寫入,然後執行下一個命令。 :h:bar
    • exec:以ex命令執行參數。 :H:通過將它們在與管道字符的命令行的vim分離ħ擴展()
    +0

    謝謝!我討厭成爲一種有害生物,但你可以簡單地解釋它是如何工作的? – ClosureCowboy

    0

    我想你想了解vim中的緩衝區管理。一旦這兩個文件都作爲緩衝區加載,您可能可以在:b appl<tab>之間切換它們。當然,如果您要同時編輯10個Makefiles,則這不能很好地擴展。

    相關問題