2
2

More than 5 years have passed since last update.

foldexprの評価のみを実行する方法

Posted at

短い日本語でタイトルをうまく表現できなかったのですが、以下の理由で、foldexprを評価するだけの関数(もしくはコマンド)を作り、手動でfoldexprを評価させたかったのです。

  • ずっとfoldmethodexprのままだと、行数の多いファイルを編集時にものすごく重い!
  • autocmdで動的にうまくfoldmethodを切り替えられたらよいのですが、ちょうど良い設定が実現できない。
  • :setlocal foldmethod=exprを一々タイプするのもめんどい。

で、以下が実現できるコードです。わかってしまえば簡単だったのですが、redrawを行うとfoldexprが評価され、redrawを行わないとfoldexprが評価されませんでした。

function! s:eval_foldexpr()
  let saved_foldmethod = &foldmethod
  let saved_foldexpr = &foldexpr
  try
    setlocal foldmethod=expr
    setlocal foldexpr=getline(v:lnum)[0]==\"\\t\"
    redraw
  finally
    let &l:foldmethod = saved_foldmethod
    let &l:foldexpr = saved_foldexpr
  endtry
endfunction

" 適当にキーマッピングする。
nnoremap    <leader>f    :<C-u>call <sid>eval_foldexpr()<cr>
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2