12

私のvimには、以下に示すようなパス設定があります。

path=.,/usr/include,,

これは「パス」のデフォルト設定だと思います。

このためg f、カーソルの下の c ヘッダー ファイルを開きます。

pathただし、C++ ファイルでは、C++ ヘッダー ファイルの場所がvim の変数に追加されていないため、C++ ヘッダー ファイルは開かれません。

set path+=/usr/include/c++/4.6

この設定が解決策になると思いますvimrc。しかし問題は、C++ ヘッダー ファイルの実際のディレクトリの場所が、Linux ディストリビューションと g++ コンパイラのバージョンごとに変更されることです。

移植可能な方法で c++ ヘッダー ファイルのパスを設定するにはどうすればよいですか?

let g:gcpp_headers_path = system("g++ --version | grep g++ | awk '{print \"/usr/include/c++/\"$NF}'")

execute 'set path+=' . g:gcpp_headers_path

今、私はこれを上記で使用しています: これは g++ 環境で動作します。他のコンパイラではテストされていません。

4

4 に答える 4

10

場所の数が限られている場合は、単純な条件付きで~/.vimrc実行できます。

if isdirectory('/usr/include/c++/4.6')
    set path+=/usr/include/c++/4.6
elseif isdirectory(...

多くの異なるシステムがあり、すべてのバリエーションを中央の場所に保持したくない場合は、システムに依存する設定を別のローカル専用ファイルに移動し、次の~/.vimrcように から呼び出すことができます。

" Source system-specific .vimrc first.
if filereadable(expand('~/local/.vimrc'))
    source ~/local/.vimrc
endif
于 2013-04-10T06:40:29.943 に答える
1

私は最近同じ問題を抱えていたので、文書化のための私の解決策は次のとおりです。

1) に以下を追加しました.bashrc:

# add additional search paths to vim.
VIM_EXTPATHS="$HOME/.vim.extpaths"
if [ ! -e "$VIM_EXTPATHS" ] || [ "/usr/bin/cpp" -nt "$VIM_EXTPATHS" ]; then
    echo | cpp -v 2>&1 | \
    awk '/^#include </ { state=1 } /End of search list/ { state=0 } /^ / && state { print "set path+=" substr($0, 2) "/**2" }' > $VIM_EXTPATHS
fi

2)私は私のに以下を追加しました.vimrc

" add extra paths.
let s:extpaths=expand("$HOME/.vim.extpaths")
if filereadable(s:extpaths)
    execute "source ".s:extpaths
endif

私のシステムでは、.vim.extpathsファイルの内容は次のとおりです。

set path+=/usr/lib/gcc/x86_64-linux-gnu/8/include/**2
set path+=/usr/local/include/**2
set path+=/usr/lib/gcc/x86_64-linux-gnu/8/include-fixed/**2
set path+=/usr/include/x86_64-linux-gnu/**2
set path+=/usr/include/**2

これ**2は、ViM がこれらのディレクトリの奥深くにある 2 つのディレクトリを検索することを意味します。gfこれで、必要なすべての C++ ヘッダーが見つかります。深さを増やすと、検索にかかる時間が長くなるため、この数値を高く設定しすぎないようにしてください。

@note: for の#include <chrono>場合、ViM は に移動し/usr/include/boost/chronoます。これは面白いことに、ディレクトリです。なぜgo fileディレクトリを開くのだろうかと思います。これはバグとして報告する必要があるかもしれません。正しいchronoヘッダーに到達するには、 と入力する必要があります2gf

于 2018-11-08T13:22:21.777 に答える
-2

コンパイラが調べる特定の環境変数があります。Linux/Unix 環境で gcc/g++ を使用している場合、変数はC_INCLUDE_PATHCPLUS_INCLUDE_PATHです。bash/sh を使用してexport VARIABLE=valueいる場合は使用し、csh/tcsh を使用setenv VARIABLE valueしている場合は使用し、他のシェルを使用している場合はそれを調べる必要があります。これらの例では、とのVARIABLEいずれかです。これが役立つことを願っています。C_INCLUDE_PATHCPLUS_INCLUDE_PATH

于 2013-04-10T01:42:30.007 に答える