質問: こんにちは vimでbracketsやbracesをオートインデントを有効にした状態で自動補完する の質問をした者です。 vimでautoindentされた行でBackspaceを押したときにその上の行のインデントにカーソルが戻るようにする方法はないのでしょうか? ひょっとすると、autoindentではスペースが入力されているように見えているだけで、その行に非空白文字が入力されなかった場合は何も入力されていないということになるということなのでしょうか? 図で表すと (例1) ``` {|} //最初の状態。delimitMateによって補完されているためこの状態になる ``` ここで改行します。delimitMateの設定によって下のようになります。(上記質問のリンク参照)(例2) ``` { | } ``` もう一度改行するとautoindentを有効にしているため下の例のようになります。(例3) ``` { | } ``` このときにBackSpaceを2回押すと下記のようにカーソルが戻ってしまいます。(例4) ``` { | } ``` これをAtom.ioのように (例5) ``` { | } ``` 上のようにスペース4文字のところにカーソルが戻るようにするにはどうすればいいのでしょうか? ちなみに、vimrcは ``` set expandtab set backspace=indent,eol,start set shiftwidth=4 set tabstop=4 set autoindent ``` となっています。
回答: インサートモード中に`CTRL-F`を入力するとの現在行のインデントを再調整できます。 `:h i_CTRL-F` ``` Characters that can precede each key: i_CTRL-F ! When a '!' precedes the key, Vim will not insert the key but will instead reindent the current line. This allows you to define a command key for reindenting the current line. CTRL-F is the default key for this. Be careful if you define CTRL-I for this because CTRL-I is the ASCII code for . ``` つまり、`(例4)`の状態で`CTRL-F`を入力することで`(例5)`の状態にすることが出来ます。 私の場合はこれで事足りています。 他にインサートモード中にインデントを調整するスペシャルキーは`i_CTRL-T`と`i_CTRL-D`があります。詳細はヘルプを参照下さい。(`:h i_CTRL-T` `:h i_CTRL-D`) ノーマルモード時は以下のヘルプを参照下さい。(`:h =` `:h <` `:h >`)