2017-02-27 9 views
1

私は、(GitHub風味のマークダウン)のファイルをpdfに変換するための小さなvimリーダーのマッピングを書いていました。vim exモードでは、@%は何をしますか?

これらの作業の両方、および機能的に同等であるように見える:

nnoremap <expr> <leader>pdf ':! pandoc -f markdown_github --latex-engine=xelatex ' . shellescape(@%,1). ' -o ' . shellescape(expand('%:r'), 1) . ".pdf \<cr>" 

nnoremap <expr> <leader>pdf ':! pandoc -f markdown_github --latex-engine=xelatex ' . shellescape(expand('%'),1). ' -o ' . shellescape(expand('%:r'), 1) . ".pdf \<cr>" 

私が働いて最初の1(おかげでスタックオーバーフローを;)だったが、私は本当に最初shellescapeで@%を理解していませんでした。だから私はexpand('%')と交換しましたが、もう少し詳しく "取得"します。

誰でもこの違いを説明することはできますか?私は:help :@を読みましたが、Execute the contents of register as an ex commandについては、と表示されていません。はここで起こっているようです。

どのようなヘルプ/ポインタも素晴らしいでしょう!

答えて

4

@%は、現在のバッファに関連付けられたファイルの名前を含むレジスタです。それは、例えば、他のレジスタと同じように使用することができます:あなたの最初の例で

i<C-r>% 
"%p 

shellescape()は、その最初のパラメータとして文字列を期待して文字列を出力します。 @%のタイプがストリングなので、@%を直接使用することができます。

+0

ありがとうございました。私を混乱させたのは「実行する」部分でした。私のファイルの名前を元のコマンドとして実行すると(私は思ったように)壊れてしまったでしょう。それは実際にはレジスタを "実行"しているのですか、または "実行された"ときにそれ自身を返すだけの特別なものです。 –

+0

'@ 'の表記法は、a)Exコマンド(cmd-lineモード)またはマクロ(通常モード)のように' 'の内容を実行し、b)式の中に「」が含まれています。しかし、私はVimscriptがこのようなあいまいさでいっぱいであることを認めなければなりません。疑わしい場合は、文書の該当するセクションを読んでください。 – romainl

関連する問題