質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

Q&A

解決済

2回答

665閲覧

vim / foldingの折り畳みの挙動を変更したい

takets

総合スコア43

Vim

VimとはUnix / Linux 系のOSに標準搭載されているターミナル上で動くテキストエディタです。

0グッド

0クリップ

投稿2017/07/07 12:47

###前提・実現したいこと
foldingの折り畳みの挙動をアウトラインエディタのworkflowyに近づけたい。

###問題
vimのfoldingがworkflowyを代表としたアウトラインエディタの折り畳みと異なる挙動をするのを変更したい。

####例
※ {{{1 等の折り畳みレベルを便宜的に(1), (2)などと表現します

aaaa(1) bbb(2) ccc(2) ddd(3)

上記のような階層表示において、ccc(2)の行にカーソルを移動させ、zcで折り畳むと

aaaa(1) bbb(2) ccc(2)

という挙動(dddはcccの子ノードなので、cccの中に折り畳まれる)を期待していましたが、

aaaa(1) bbb(1)

ccc(2)がbbb(2)に折り畳まれ、さらにbbbの階層が(1)になってしまいます。

vimの公式リファレンスを読んでも、上記のようなfoldingの折り畳みの挙動についての記載は発見できずにいます。

このような場合、どのような設定をすれば期待する挙動となりますでしょうか。
もし設定のみで解決しない場合、vimscriptのレベルでプラグインを作ることで解決できるものなのでしょうか。指針のみでもかまいませんので、お教えいただければと思います。

###試したこと
foldlevelを変更して試す
foldmethodをindentに変更して試す

###補足情報(言語/FW/ツール等のバージョンなど)

  • Windows10 64bit
  • Kaoriya-vim 最新版
  • vimrcに『set foldmethod=marker』のみを追加

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

vim

1scriptencoding utf-8 2function! FoldTree(lnum) 3 let indc = len(matchstr(getline(a:lnum ),'^\s*'))+1 4 let indn = len(matchstr(getline(a:lnum+1),'^\s*'))+1 5 return indn > indc ? '>'.indc : indc-1 6endfunction 7setl foldenable foldmethod=expr foldexpr=FoldTree(v:lnum) 8setl foldtext=v:folddashes.'\ '.getline(v:foldstart)

こんなスクリプトを使ってはどうでしょうか?プラグイン化してませんが、ニーズがあるなら作るかもしれません。

投稿2017/07/08 07:58

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takets

2017/07/10 01:38

ありがとうございます。 markerでは対処できなそうなため、いただいたサンプルコードをもとに手を加えてみようかと思います。 また、上記アウトライン ddd(3)の下にfodldingに含まれないテキストがある場合、こちらまで折り畳まれてしまう現象があるため、こちらも合わせてプラグインにできればと思います。
guest

0

ベストアンサー

vimrcに『set foldmethod=marker』のみを追加

この状態だと 'foldmerker' オプションは {{{,}}} のように設定されているので、マーカーテキストを設置しないと折り畳みは行われません。

そして期待している挙動ですが、Vim のデフォルトでは難しいかと思います。foldmethod=expr にして、自作することで可能になるとは思います。
割とありがちな挙動だとは思うので、もしかしたら探せばすでに同様のことをするプラグインなりが存在するかもしれませんが、残念ながら私は知りません。

作るということでしたらアドバイスはできると思います。

投稿2017/07/07 17:00

thinca

総合スコア1864

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takets

2017/07/08 09:15

サンプルありがとうございます。 現在、富士山登山中のため、下山後に試してベストアンサーをつけさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問