1

あなたが崇高なテキスト2で:

BLOCK { <Return>

生成されます(パイプはカーソルです):

BLOCK {
  |
}

Vim をこのように動作させるにはどうすればよいですか?

戻り時にこれを行うためautoindent、オンとsmartindentオフがあります。smartindent

BLOCK {
 |}

より明確にするために、私は特に2つのリターン、1行上への移動、およびタブイン(具体的には2つのソフトタブ)を探しています。、など{の自動一致文字を既に持っています。([

4

5 に答える 5

3

単純なマッピングは、ほとんどの目的で機能します。

imap {<cr> {<cr>}<c-o>O

プラグインによっては、inoremap代わりにimap.

于 2012-12-03T21:46:54.500 に答える
2

以前はTextMateを使用していましたが、現在はST2を使用しています。

あなたの前には基本的に2つの道があります。

  • 「ばかげた」道

    この方法には数十のバリエーションがあります。目標を達成するために必要な一連のキー押下を実行するマッピングを作成するだけです。

    inoremap {<CR> {<cr><cr>}<C-o>k<tab>
    

    私はそれを「ばかげた」と呼びましたが、それを使うのがばかげているという意味ではありません。ローテクで、依存関係がなく、カスタマイズが簡単で、好きなものにマッピングできます。

  • 「スマート」な方法

    この方法では、プラグインを使用します。私はDelimitMateを使用していますが、他にもたくさんあります。毒を選択してください。

于 2012-12-03T21:38:59.123 に答える
1

私はvimアドオンを簡単に掘り下げました(これは、この種の問題の解決策であることがよくあります)。私はあなたが望むものを見つけたとは思わない:近いアドオンがいくつかありますが、閉じ括弧の前に余分な改行を挿入するものは何もありません.

次のようなことができます

imap { {<return><return>}<up><tab>

しかし、他の状況で中括弧を使用する言語で作業している場合、これは厄介になります。代わりに、改行に反応することができます:

inoremap <return> <return><return>}<up><tab>

もちろん、これは、左中括弧に続くものだけでなく、入力されたすべての改行でトリガーされます。中括弧が現在の行の最後の文字であることを確認するには、次のことができます。

  • 次のような関数を (~/.vimrc または ~/.vim/plugin のどこかに) 用意します。

    function! CloseBraceIfOpened()
      if getline(".")[-1:] == '{'
        " insert a space and then delete it to preserve autoindent level
        exec "normal o "
        normal x
        normal o}
        normal k
      else
        normal o
      endif
    endfunction
    
  • またする

    inoremap <buffer> <enter> <esc>:call CloseBraceIfOpened()<enter>A
    

これimapはバッファ固有であるため、マッピングは実行時に現在のバッファにのみ適用されることに注意してください。すべてのバッファに適用するには、 を削除し<buffer>ます。

あなたが本当に野心的/特定の場合は、関数でテストを実行して、現在の行のコードが実際にブロックを開くかどうかを確認できます。

インデントを希望どおりに機能させるには、「autoindent」および「smartindent」設定をオンにします。

: set autoindent smartindent

デフォルトでオンにするには、追加します

set autoindent smartindent

~/.vimrc

于 2012-12-03T20:57:12.853 に答える
0

次のマップを使用します。

inoremap {{ {<CR><CR>}<ESC>kcc

使用する代わりに、{<CR>このマッピングを使用します。それに加えて、romainl で言及されているプラ​​グイン DelimitMate を中括弧付きの他のマッピングにも使用しています。

于 2012-12-04T00:13:27.750 に答える