1

私はctagsタグを生成し、 (この wiki ページset tags+=~/.vim/tags/cppをたどっただけです) に配置するために使用しています。私のファイルには以下のような設定もあるので、現在のファイルの nerdtree ビューアーを自動同期できます (これを参照):.vimrcvimrc

" returns true iff is NERDTree open/active
function! rc:isNTOpen()        
  return exists("t:NERDTreeBufName") && (bufwinnr(t:NERDTreeBufName) != -1)
endfunction

" returns true iff focused window is NERDTree window
function! rc:isNTFocused()     
  return -1 != match(expand('%'), 'NERD_Tree') 
endfunction 

" calls NERDTreeFind iff NERDTree is active, current window contains a modifiable file, and we're not in vimdiff
function! rc:syncTree()
  if &modifiable && rc:isNTOpen() && !rc:isNTFocused() && strlen(expand('%')) > 0 && !&diff
    NERDTreeFind
    wincmd p
  endif
endfunction

autocmd BufEnter * call rc:syncTree()

問題は、~/.vim実際には別のフォルダーへのシンボリック リンクであることです (そのため、git または他の VCS を使用してすべてのドットファイルを簡単に管理できます)。Ctrl+を使用]して定義 (タグ情報は~/.vim/tags/cppにあります) を探すと、常にエラーが発生します。

detected while processing function rc:syncTree..<SNR>15_findAndRevealPath..102:
line    2:
E605: Exception not caught: NERDTree.InvalidArgumentsError: /home/hongxuchen/.vim/tags/cpp_src/stl_iterator.h should be under /home/hongxuchen/data_backup/dotfiles/_vim/tags/cpp_src

set tags+=/real/path/to/cppで代わりに使用する必要があるということvimrcですか?

4

2 に答える 2

4

Vim では、resolve()関数はシンボリック リンクを処理できます。で置き換えてみてくださいplugin/NERD_tree.vim

function! s:findAndRevealPath()
    try
        let p = s:Path.New(expand("%:p"))

function! s:findAndRevealPath()
    try
        let p = s:Path.New(resolve(expand("%:p")))

それが機能する場合は、プラグインの作成者にパッチを送信します。

于 2013-01-25T07:33:20.450 に答える
3

あなたの質問に対する厳密な回答ではありませんが、私の回答はあなたの根本的な問題を解決するのに役立ちます.

私は「本当の」vimrcバージョン管理下に~/.vim/vimrcあり、シンボリックリンクが嫌いな~/.vimrcのでシンボリックリンクではありません。代わりに、1 行だけの通常のファイルです。~/.vimrc

runtime vimrc
于 2013-01-25T07:48:38.820 に答える