6

現在のgfコマンドは、*.pdf ファイルを ASCII テキストとして開きます。PDF ファイルを外部ツール (okular、foxitreader など) で開く必要があります。次のように autocmd を使用してそれを達成しようとしました:

au BufReadCmd *.pdf silent !FoxitReader % & "open file under cursor with FoxitReader
au BufEnter *.pdf <Ctrl-O> "since we do not really open the file, go back to the previous buffer

ただし、2 番目の autocmd は期待どおりに機能しませんでした。<Ctrl-o>ある意味でコマンドを実行する方法がわかりませんでしたautocmd

での方法についてのヒントを教えてください。または<Ctrl-O>autocmdでpdfファイルを開くためのより良い方法を直接提案してgfください。

ありがとう。

4

2 に答える 2

8

これautocmdは、an に続くものが ex コマンド (コロンで始まるもの) であるためです。通常モード コマンドの実行をシミュレートするには、 コマンドを使用します :normal<C-O>問題は、 a ( ではなく <Ctrl-O>) を に直接渡すことができないことです:normal。これは、あまり意味のある通常のコマンドではないリテラル文字 (<、次に C、次に r) と見なされます。次の 2 つのオプションがあります。

1.リテラル ^O 文字を挿入する

を使用controlvcontroloして取得します:

au BufEnter *.pdf normal! ^O

2.:executeあなたのコマンドを構築するために使用します

このようにして、エスケープされたシーケンスでより読みやすい結果を得ることができます。

au BufEnter *.pdf exe "normal! \<c-o>"

とにかく、これは最も適切なコマンドではありません。<C-O>ジャンプ リストの前の場所にジャンプするだけなので、バッファは開いたままです。私は次のようなことをします:

au BufEnter *.pdf bdelete

その代わり。それでも、別の解決策があります。


たとえば、マップを使用して別のコマンドを作成しますgO。次に、PDF リーダーを直接使用するかopen、MacOS X や Darwin を使用している場合のようなユーティリティを使用します (他の Unix システムにあるのか、どのように呼び出されるのかはわかりません)。引数として渡されたファイルのアイコンをダブルクリックするのと同じように、デフォルトの PDF リーダー、または画像など、デフォルトで任意のファイルを開くように構成された他のアプリケーションが開きます。

:nnoremap gO :!open <cfile><CR>

これ<cfile>は、カーソルの下のファイルに展開されます。そのため、ファイルを Vim で開きたい場合は、gf. デフォルトのアプリケーションで開きたい場合は、 を使用しますgO

このコマンドがない場合、または PDF のみのソリューションを希望する場合は、希望するコマンドへのマップを作成します。

:nnoremap gO :!FoxitReader <cfile> &<CR>
于 2011-10-18T17:38:22.650 に答える