回答:
以前の回答の方法では、動的コンテンツにうまく変換できません。ここにUltiSnipsやSnipMateなどのスニペットプラグインが登場します。ここでUltiSnipsのデモを提供します。それはからお好みの方法を使用してインストールします。私は、プラグイン内のvim / viのインストール方法を教えてください。
次に、またはディレクトリにUltiSnips
ディレクトリを作成します。その中に、以下を含むファイルを配置します。.vim
_vimfiles
c.snippet
snippet /// "My header" A
/*!
* @author Robbie Yi JIANG, `date +'%d-%b-%Y %T'`
*
*
*/
endsnippet
これで、Cファイルを開いてと入力すると///
、現在の日付と時刻を含むヘッダーに自動的に置き換えられます。それでおしまい!
通常、UltiSnipsは、を押すとスニペットを挿入しますTab。ここでは、スニペットを自動的に入力するように指定していA
ます。これは、最初の行の終わりのが示すことです。:help UltiSnips-syntax
スニペットの記述について詳しくは、チェックアウトをご覧ください。
ただし、ほとんどの人はのようなスニペットのコレクションから始めますvim-snippets
。ここでは説明しきれないほどたくさんありますが、それらのいくつかは非常に役立つかもしれません。
1つの方法は、このスニペットを含むファイルを作成し、「」と入力して読み取ることです///
。
たとえば、~/.vim/snippets/my_header.snip
このヘッダーを含むものを作成します。次に、このマッピングを定義します。
inoremap /// <esc>:r ~/.vim/snippets/my_header.snip<cr>i
または:
inoremap /// <esc>:call append(line('.')-1, readfile(expand('~/.vim/snippets/my_header.snip')))<cr>i
最初のマッピングでは、カーソルは挿入されたテキストの最初の行に置かれます。2番目に、カーソルは挿入されたテキストの下に置かれます。
おそらく、モードをジャンプするという点で最も単純なマッピングは次のとおりです。
inoremap /// <c-r><c-o>=readfile(expand('~/.vim/snippets/my_header.snip'))<cr>
より一般的な使用法については、スニペットプラグインを調べてください。UltiSnipsとSnipMateは人気のあるものです。私もどちらも使用しないので、お勧めしません。
文字列を返す関数を記述して呼び出します。
function! InsertHeader()
let l:header = "/*!\n"
\. "* @author Robbie Yi JIANG, " . strftime('%d-%b-%Y %H:%M:%S') . "\n"
\. "*\n"
\. "* \n"
\. "*/\n"
return l:header
endfunction
inoremap /// <C-R>=InsertHeader()<Enter><C-O>2k<C-O>$
の詳細はstrftime
プラットフォームによって異なります。Windowsを使用しておらず、機能していない場合はman strftime
、引数を理解する必要があります。
これは挿入モードで機能しますが、スラッシュ処理には奇妙なことをします。C ++スタイルの//
コメントを実行している場合、2番目のスラッシュはスペースまたはその後に何かを入力するまで表示されません。
<C-R>=
カーソル位置の表現を挿入します。InsertHeader()<Enter>
ビットが評価されます式です。関数の行ごとに文字列を作成します。これ.
は文字列の連結で\
あり、行継続文字です(継続は、「Cとそのファミリが行う方法とは対照的に、「これを前の行と結合する」と言います)。最後に、2つの<C-O>
操作、1つは2行上に移動する操作、もう1つはおそらくファイルコメントが入力される行の終わりに移動する操作です。の4行目の文字列の末尾のスペースに注意してくださいl:header
。