4

私はVimを学んでおり、F5キーをファイルタイプによって決定されるコンパイルコマンドにマッピングすることにより、IDEとしてセットアップしたいと考えています。

私の~/.vim/ftplugin/c.vim

map <F5> :w<CR>:!clang % -o %:r.out && ./%:r.out<CR>

私の~/.vim/ftplugin/cpp.vim

map <F5> :w<CR>:!clang++ -ggdb -pthread -std=c++11 % -o %:r.out && ./%:r.out<CR>

C++ ファイル (.cpp拡張子付き) を開いて F5 キーを押すと、からのコマンドc.vimが実行されます。なぜこうなった?

ファイルを削除するとc.vim、Vim が読み込まcpp.vimれ、期待どおりに動作します。

4

2 に答える 2

10

vim に付属の cpp ftplugin には次の行があります。

runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim

つまり、~/.vim/ftplugin/c.vim.

~/.vim/after/ftplugin/cpp.vimこれを克服する方法は、マッピングを~/.vim/after/ftplugin/c.vimファイルに入れることです。

しかし、あなたの問題はそれだけではありません:

  • :map少なくともモードを提供したい場所で使用しています。nmap
  • あなたもおそらく使用しているはずなnoremapので、それはなるでしょうnnoremap
  • マッピングはグローバルであるため、ファイル<f5>を開いてcpp切り替えるたびに踏み込みcます。特定のバッファに対してローカルにする必要があります。nnoremap <buffer>
  • クイックフィックスリストmakeprgを利用できるように、おそらくそれに応じて設定する必要があります。:make例えばsetlocal makprg clang\ %\ -o\ %:r.out

詳細については、次を参照してください。

:h :map
:h :map-local
:h 'makeprg'
:h :make
:h quickfix
于 2014-01-24T18:13:50.200 に答える