intime o'

宇宙のありとあらゆる知的生命体のみなさんこんにちわ。(ダグラス・アダムス著・安原和見訳「銀河ヒッチハイクガイド」より)
AAリスト、折りたたみ - vim 2012/02/12(Sun.)
 仕事をするわけでもない本当にただの穀潰しには勉学だけが本業だねという第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)