http://blog.tuxcoder.com/2008/12/vim-restructure-text-macros.html を参考に、日本語タイトルに対応する。
vimスクリプトが全く判らないので、Pythonに頼った。
キーマップとか、もっと賢い方法があると思う。
python <<EOF
_e_a_width_map = dict(F=2, H=1, W=2, Na=1, A=2, N=1)
def _count_width(s):
import unicodedata
return sum(_e_a_width_map.get(unicodedata.east_asian_width(c), 0) for c in s)
def rst_heading(n=0):
import vim
u = vim.current.line.decode(vim.eval('&encoding'))
line_width = _count_width(vim.current.line.decode('cp932'))
heading_line = ('#*=-^"'[n]) * line_width
lineno = vim.current.window.cursor[0]
vim.current.buffer[lineno:lineno] = [heading_line]
if n < 2:
vim.current.buffer[lineno-1:lineno-1] = [heading_line]
EOF
" Restructured Text
" #########################
" Ctrl-u 1: underline Parts w/ #'s
noremap <C-u>1 :py rst_heading(0)<CR>
inoremap <C-u>1 <esc>:py rst_heading(0)<CR>
" Ctrl-u 2: underline Chapters w/ *'s
noremap <C-u>2 :py rst_heading(1)<CR>
inoremap <C-u>2 <esc>:py rst_heading(1)<CR>
" Ctrl-u 3: underline Section Level 1 w/ ='s
noremap <C-u>3 :py rst_heading(2)<CR>
inoremap <C-u>3 <esc>:py rst_heading(2)<CR>
" Ctrl-u 4: underline Section Level 2 w/ -'s
noremap <C-u>4 :py rst_heading(3)<CR>
inoremap <C-u>4 <esc>:py rst_heading(3)<CR>
" Ctrl-u 5: underline Section Level 3 w/ ^'s
noremap <C-u>5 :py rst_heading(4)<CR>
inoremap <C-u>5 <esc>:py rst_heading(4)<CR>
" Ctrl-u 5: underline Section Level 4 w/ "'s
noremap <C-u>6 :py rst_heading(5)<CR>
inoremap <C-u>6 <esc>:py rst_heading(5)<CR>
追記
C-u にマップすると上にスクロールするのが邪魔されることに後で気づいた。
良いキーマップを見つけるまで保留。