43

多数の .h および .cpp ファイルを含むフォルダーがあるとします。私は頻繁に次のことを行う必要があります。

  1. ファイルを開くprefix_SomeReallyLongFileName.h,
  2. それにいくつかの変更を加え、
  3. を開きprefix_SomeReallyLongFileName.cppます。

オートコンプリートを使用してこれを行うことができます:e <filename>が、プレフィックスが多くのファイルで同じであるため、不便になります。

現在のファイルと同じ名前で拡張子が異なるファイルを開く簡単な方法はありますか?

他の人もこの状況に出くわしますか? もしそうなら、ディレクトリ内の C++ ファイルをナビゲートするためのあなたの好みの方法は何ですか? ありがとう。

4

6 に答える 6

68

:r最後の拡張子を削除する (ルート) ファイル名修飾子を使用できます(詳細については、チェックアウト:h filename-modifiersしてください)。

:e %:r.cpp

どこ

  • %現在のファイル名の省略形です。
  • :r拡張子を削除します
  • .cppその文字列を最後に追加するだけです。

これにより、現在のファイルの拡張子が別の拡張子に効果的に置き換えられ、新しい拡張子のファイルが開かれます。


さらに短い方法 ( Peter Rincker 提供)、

:e %<.cpp

関連ドキュメント:h extension-removal

于 2013-06-18T14:17:37.920 に答える
27

Vim wiki によると、かなりの数の方法が提案されています

この記事からいくつかのオプションの概要を説明します。

  • a.vimまたはFSwitch.vimプラグイン
  • ctags の使用
  • :e %<.cまたは:e %<.h%<拡張子なしの現在のファイルを表す
  • クイック マッピングnnoremap <F4> :e %:p:s,.h$,.X123X,:s,.cpp$,.h,:s,.X123X$,.cpp,<CR>。これを に追加します~/.vimrc
于 2013-06-18T14:36:10.723 に答える
4

これは単純な(?!)vimscriptを使用しているだけなので、ファイルに入れることができます。ファイルvimrcに対して機能するようになりましたが、(明らかに).c非常に簡単に変更できます.cpp。内部のifステートメントに「エラー処理」さえあります(それはおそらく無意味です)しかし、誰かがそれを必要とするなら、ねえ、そこにあります!それがないと、はるかに短くなります (:e %<.hたとえば、 をそのままにしておきます)。

function! HeaderToggle() " bang for overwrite when saving vimrc
let file_path = expand("%")
let file_name = expand("%<")
let extension = split(file_path, '\.')[-1] " '\.' is how you really split on dot
let err_msg = "There is no file "

if extension == "c"
    let next_file = join([file_name, ".h"], "")

    if filereadable(next_file)
    :e %<.h
    else
        echo join([err_msg, next_file], "")
    endif
elseif extension == "h"
    let next_file = join([file_name, ".c"], "")

    if filereadable(next_file)
        :e %<.c
    else
        echo join([err_msg, next_file], "")
    endif
endif
endfunction

vimrc次に、次の行に沿って何かをさらに追加します。

let mapleader = "," " <Leader>
nnoremap <Leader>h :call HeaderToggle()<CR>

通常モードのときはいつでも、カンマ,(これが私たちの<Leader>ボタンです) を押すhと、上記の関数が呼び出され、ファイルを切り替えます。多田!

于 2016-08-04T19:35:06.430 に答える