2011-02-26 13 views
1

これは初心者の質問です!Vimでは、現在のファイルと同じ名前で別のディレクトリにあるファイルを開きます

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

はのもVimのカレントディレクトリが親ディレクトリrecipes/disaster-stories/両方のに設定されていると仮定しましょう:我々は2つのディレクトリを持っていると仮定しましょう。

質問:

私はrecipes/apple-pie.txtを編集していた場合、私は、現在のファイルを保存するとdisaster-stories/apple-pie.txtを開くことを引き起こす、など:dsstrとしてカスタムコマンドを入力できるようにしたいです。どうすればこのことができますか?

+0

@Robert編集をありがとう。 – ClosureCowboy

+0

なぜ挑戦してみませんか::w災害 - 物語/アップルパイ。txt –

+0

私は、おそらく私はすべきです。しかし、毎回その名前を指定しなくても、対応するファイルにジャンプできると便利だと思います。 – ClosureCowboy

答えて

4

することができますチェーンコマンド:参照:

  • expand()を実行します。

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

    Vimはコマンドラインのコマンドで現在編集ファイル名に%を拡大していきます。いくつかの修飾子を追加して、さまざまな方法でファイル名を操作できます(マニュアルのfilename modifiersを参照)。たとえば、%:tはファイル名の末尾(最後のコンポーネント)です。 %recipes/apple-pie.txtの場合、%:tapple-pie.txtとなります。私はこの種のものをしたいとき

    :w | e disaster-stories/%:t

    通常私は、カスタムキー割り当てを気にしないでください。最近このようなコマンドを使用した場合は、その接頭辞(:w |)を入力し、上矢印キーを使用して履歴から便利に呼び出すことができます。

  • +0

    +1私は '|'や '%t 'について知らなかった。ありがとうございました!これは、単一のコマンドであるかどうかにかかわらず、本当に良い解決策のように思えます。 – ClosureCowboy

    1

    EDIT:解決策があります。私はvimで関数を書く方法がわかりませんが、あなたのために仕事をするためのシェルスクリプトを書くことができます。私はあなたの現在のファイルを保存するスクリプトを書こうとしましたが、新しいファイルに切り替えるよりも終了しましたが、いくつかのエラーが発生しました。しかし、これで入力することができます:

    :w | ! scriptName 
    

    ! vimに "cd"や "ls"のようなコマンドを実行するよう指示します。

    手順シェルスクリプトにする:
    -cd
    -mkdirビン(ビンはすでに〜に存在しない場合)
    -cdビン<を - あなたは、Linuxができるよう、〜/ binにスクリプトを作りたいですそれを見つけるには -vim nameOfScript(これは、コマンドを実行するために入力するものです。たとえば、 "vimScript"という名前を付けた場合、 "vimScript"と入力します。次のテキスト-ENTER」(Vimの変更)

    :!
    #/ binに/ bashの
    vim -c e {)

    注:最初の行、#!/ bin/bashは、これがスクリプトであることをUnix/Linuxに伝えます。 vimの-c電子pathToFileは、-save "VIM -c電子pathToFile" コマンドを実行し、
    -chmod + X nameOfscript < - これは、スクリプトを実行可能
    -Enjoyを行い終了します!あなたは今、あなたは今、あなたのファイルを保存し、入力して次へと移動することができますすることができます

    :w | ! nameOfScript 
    

    ノートのいくつかのことを:これが唯一の方法で動作します。 1つのファイルに切り替えるためのコマンドと、もう1つのファイルに切り替えるためのコマンドの2つのコマンドを書くか、スクリプトにさらに追加する必要があります。あなたがより多くのファイルを後でもっと簡単に追加できるようにするために、moreを追加するのが最善の方法でしょう。

    また、スクリプトを作成するのを間違えた場合に備えて、両方のファイルのバックアップを作成することをお勧めします。

    ご不明な点がありましたら、尋ねてください。以下のいくつかのより多くのリンク:また、これらの2つのリンクが将来に役立つことを証明でき
    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を使用することができます。

    これはまったく柔軟ではありませんが、必要なものがわからないため、これ以上進めません。今

    EDIT 詳細はVimのヘルプへのポインタと短い説明:

    • command!:コマンドを作成し、それが存在する場合はそれを上書きします。 :help:コマンド
    • -bar:許可|コマンドを連結する。 :h:コマンドバー
    • Dsstr:ユーザーコマンドは大文字で始まる必要があります。
    • w|:書き込みし、次のコマンドを実行します。 :h:bar
    • exec:引数をexコマンドとして実行します。 :H:パイプ文字とVimのコマンドラインでそれらを分離することによって、時間が拡大()
    +0

    ありがとう!私は害虫であることは嫌いですが、これがどのように機能するかを簡単に説明できますか? – ClosureCowboy

    0

    私はvimでバッファ管理について学びたいと思っています。両方のファイルがバッファとしてロードされると、:b appl<tab>でそれらを切り替えることができます。もちろん、10個のMakefileを同時に編集している場合、これはうまく拡張できません。

    関連する問題