XCodeのように///で/ *コメントセクションを作成するにはどうすればよいですか?


8

XCodeには、vvdocumentと呼ばれるアドオンがあり、3つの/ヒットを検出して以下に転送できます///

/*!
*  @author Robbie Yi JIANG, 29-Jan-2016 14:01:45
*
*  
*/

Vimでこれを行うにはどうすればよいですか。

回答:


9

以前の回答の方法では動的コンテンツにうまく変換できません。ここにUltiSnipsやSnipMateなどのスニペットプラグインが登場します。ここでUltiSnipsのデモを提供します。それはからお好みの方法を使用してインストールします。私は、プラグイン内のvim / viのインストール方法を教えてください。

次に、またはディレクトリにUltiSnipsディレクトリを作成します。その中に、以下を含むファイルを配置します。.vim_vimfilesc.snippet

snippet /// "My header" A
/*!
*  @author Robbie Yi JIANG, `date +'%d-%b-%Y %T'`
*
*  
*/
endsnippet

これで、Cファイルを開いてと入力すると///、現在の日付と時刻を含むヘッダーに自動的に置き換えられます。それでおしまい!

通常、UltiSnipsは、を押すとスニペットを挿入しますTab。ここでは、スニペットを自動的に入力するように指定していAます。これは、最初の行の終わりのが示すことです。:help UltiSnips-syntaxスニペットの記述について詳しくは、チェックアウトをご覧ください。

ただし、ほとんどの人はのようなスニペットのコレクションから始めますvim-snippets。ここでは説明しきれないほどたくさんありますが、それらのいくつかは非常に役立つかもしれません。


3
Ultisnipsの+1。スニペットを展開した後、カーソルのジャンプ場所とデフォルトの場所を指定することもできます。
fruglemonkey 2016

6

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>

より一般的な使用法については、スニペットプラグインを調べてください。UltiSnipsSnipMateは人気のあるものです。私もどちらも使用しないので、お勧めしません。


3

文字列を返す関数を記述して呼び出します。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.