仕事をするわけでもない本当にただの穀潰しには勉学だけが本業だねという第156話 Vimの折りたたみレベルとやらがよくわからない。 関数を使ってレベルを指定するのだけれど、レベルというのは深さのことだよね? そしてレベル1と">1"はどう違うの?使い分けがよくわからない。 とりあえず色々試してこうすればいいや、と。function! MyList(num) let line = getline(a:num) if line =~ "^@ " return ">1" elseif line =~ "^# " return ">2" elseif line == "" return "<2" else return "=" endif endfunction
これは深さ2までの折りたたみだけをサポートしてるものであって 自分としてはこのような折りたたまれるテキストを想定している。@ カテゴリ1 # コンテンツ1 何々 # コンテンツ2 なんちゃらかんちゃら うんたら @ カテゴリ2 # コンテンツ2-1 何か
@がレベル1の折りたたみで#がさらにその中の折りたたみ。 間に開けている空行はただ見やすさのためだけにあるものであって、 無くても良い。折りたたまれた状態ではレベル2として折りたたまれるので 空行は表示されない。 開いたら次のカテゴリ、コンテンツと離れて見えるので見やすい。 これはAAリストの為に作った。 だからまだ続きがあってfunction! MyListInit() setlocal guifont=MS_ゴシック:h10:cSHIFTJIS normal zM nnoremap <buffer> <CR> :call ViewAA()<CR> endfunction function! ViewAA() let i = line(".") let a = [] while i+1 <= line("$") let i+=1 let line = getline(i) if line == "" || line =~ "^#" || line =~ "^@" break else call add(a, line) endif endwhile let aa = join(a, "\n") call setreg("+", aa) echo aa endfunction au FileType AAList :set foldmethod=expr foldexpr=MyList(v:lnum) au FileType AAList :call MyListInit()
filetypeがAAListだと前のMyList()とあわせて発動する。 レベル1の@までが開いた状態で、#の行の上で<CR>を 押せば、#の中身、すなわち#の行の次の行から空行の手前または次の#の行の手前 またはファイルの最後までのテキストをgetlineで一行ずつ読み取って +レジスタ(クリップボードのはず)にコピー、あと確認の意味でechoさせる。 専ブラにもAA支援機能は大抵ついていて、自分が使っているV2Cにも短文という 機能があり、JaneのAA支援と違ってこれは中身が簡単に確認できて とても便利なのだが、管理が面倒で、カテゴリ別にまとめたりだとかが できないのが嫌だった。だからしばらく前からもう普通にテキストファイルと して管理することにした。明らかに専ブラの機能を使ったほうが AA貼付けは早いのだが、あのごちゃごちゃはとてもイライラするので、どうもね。 http://d.hatena.ne.jp/viver/20070612/p1 こんな記事を見つけた。 まだまだ自分が初心者だと思い知らされた
コメ(0) | トラ(0)