もた日記

くだらないことを真面目にやる

Vimメモ : BracelessでPythonコードの折り畳み、インデントハイライト

braceless.vim



github.com
Bracelessプラグインを使うと、Pythonのようなインデントが重要な言語でテキストオブジェクト追加、簡単なコード折り畳み、インデントハイライトができるようになる。

インストール


deinの場合は下記行をdeinlazy.tomlなどに追加。

[[plugins]]
repo = 'tweekmonster/braceless.vim'
on_ft = 'python'


使い方


Bracelessには下記表の選択可能な機能があり、使用したい機能を選択して設定すればよい。

オプション 説明
+fold 折り畳み設定を有効化
+highlight インデントハイライトを有効化
+highlight-cc インデントハイライトを有効化(colorcolumnのみを使用)
+highlight-cc2 インデントハイライトを有効化(colorcolumnも使用)
+indent オートインデントの有効化

例えば、+foldを使用したい場合は下記行をvimrcに追加。

autocmd FileType python BracelessEnable +fold

全ての機能を使用したい場合は下記行をvimrcに追加。

autocmd FileType python BracelessEnable +indent +fold +highlight

BracelessPython以外のインデントが重要な他の言語でも使用できるので下記指定も可能。

autocmd FileType haml,yaml,coffee BracelessEnable +indent +fold +highlight

以下、それぞれの機能について試してみる。
なお、テキストオブジェクトとカーソル移動についてはBracelessEnableで有効になる模様。


テキストオブジェクト

PPythonのブロックが選択できるようになるので図のような操作が可能。
f:id:wonder-wall:20170212163740g:plain
図はReadmeにあったもので操作が速すぎてよくわからないが、以下の操作をしている。

  1. viPでオブジェクト内部をビジュアル選択
  2. iPでさらに内部を選択
  3. aPでオブジェクト全体を選択
  4. ggで先頭に移動
  5. ciPでオブジェクト内部を変更(削除)して文字入力
  6. :e!でカレントファイルを強制開き直し(元に戻す)
  7. ggOで先頭に移動、先頭行に挿入して文字入力
  8. >iPでオブジェクト内部のインデントを下げる
  9. :e!でカレントファイルを強制開き直し(元に戻す)


カーソル移動

図のようにPythonのブロックを意識したカーソル移動が可能。

f:id:wonder-wall:20170212160942g:plain

キー 移動先
[[ 前のブロックの:
]] 次のブロックの:
[m 前のdefclassブロックの先頭
]m 次のdefclassブロックの先頭
[M 前のdefclassブロックの末尾
]M 次のdefclassブロックの末尾


折り畳み設定(+fold)

折り畳み操作はVim標準でも可能だが、+foldを有効化すればPython向けの折り畳み操作が簡単にできる。

f:id:wonder-wall:20170212150118p:plain

上記コードの場合に、while a < n:行にカーソルを置いてzcを押すと、

f:id:wonder-wall:20170212150128p:plain

のように折り畳まれる。この状態でdef fib(n):行にカーソルを置いてzcを押すと、

f:id:wonder-wall:20170212150736p:plain

のように折り畳まれる。開く場合はzo(一段階)、zO再帰的)を押せばよい。
折りたたみ操作で使用する代表的なキーは下記を参照。

キー 説明
zc カーソルの下の折畳を一段階閉じる
zC カーソルの下の折畳を再帰的に全て閉じる
zo カーソルの下の折畳を一段階開く
zO カーソルの下の折畳を再帰的に全て開く
zM 全ての折畳を閉じる(前に操作した対象のみ)
zR 全ての折畳を開く


インデントハイライト(+highlight, +highlight-cc, +highlight-cc2)

+highlight+highlight-cc+highlight-cc2を有効化すれば、カーソルのある行に関係するインデントがハイライト表示されるようになる。
+highlightを設定した場合は、以下のようにインデントがハイライト表示される。
f:id:wonder-wall:20170212150118p:plain
f:id:wonder-wall:20170212154400p:plain


+highlight-ccの場合は、図のようにウィンドウ全体に薄く表示される(colorcolumnという名前らしい)。
f:id:wonder-wall:20170212154601p:plain


+highlight-cc2の場合は、+highlight+highlight-ccを併せた表示になる。
f:id:wonder-wall:20170212154608p:plain

インデントは下記プラグインを使用すると常時可視化しておけるが、Bracelessの場合はカーソルのある行に応じてハイライトが変わるのが特徴。
wonderwall.hatenablog.com


オートインデント(+indent)

+indentを有効化すれば、図のように改行したときのインデントが変わる(左側がBraceless)。Readmeには完璧ではないと書いてあるし、このあたりは好みがわかれそう。
f:id:wonder-wall:20170212161756g:plain

入門 Python 3

入門 Python 3