Vimで、ファイル全体の各行の下に、一行ずつ空行を入れたい。
というのも、「各種宣言文」や「アピール文」「法律条文」(案)などをワード形式でもらうことがあるのだが、
textutil -convert txt *.doc
などとやって、でき上がったテキストファイルを見ると、
行が詰まっていることが多く、とても見づらい。
そこで、そのテキストファイルを Vim で開き、一気に、各行(段落)の下に、一行ずつ空行を入れたいと思った。
しかし、その方法がなかなか分からなかった・・・。検索したところ、コマンドラインモードから以下の通りやれば、「一行ずつならできる」ことが分かりました。「でも、一遍にファイル全体にはできません」。
- この行の上に、一行、空行を入れる。
call append(line('.')-1, '')
- この行の下に、一行、空行を入れる。
call append(line('.'), '')
多分、これでできたっぽい。「一遍にファイル全体に」一行ずつ空行を入れる!
g/$/call append(line('.')-1, '')
g/$/call append(line('.'), '')
########################################################################
【追記 2016年04月22日 09時01分】
v/\S/call append(line('.'), '')
Vim の正規表現では \S を使って「空行以外」つまり「文字が書かれた行」を表現できる。
\S は「タブ文字」「スペース文字」以外を意味する。
そこで、、、
(1)
^\S\+$ とやれば、「空行以外」つまり「文字が書かれた行」が表現できるはず・・・、と思った。
v/^\S\+$/d というVimのグローバルコマンドの否定形で、「その行の中に、空白文字やタブ文字以外の普通の文字が書かれている行」以外を一遍に削除しようとした。
というのも、「その行の中に、普通の文字が書かれて」いても、同時に「その行の中に、空白文字やタブ文字」が書かれていると
^\S\+$ ではヒットしないのだ。
(2)
方針転換して、「空白文字」や「タブ文字」以外の「普通の文字」を Vim の正規表現で表現することを目指した
文字・数字 \a [a-zA-Z] アルファベット文字
\A [^a-zA-Z] アルファベット以外の文字
\d [0-9] 数
\D [^0-9] 数字以外の文字
\w [0-9A-Za-z_] 英数字
\W [^0-9A-Za-z_] 英数字以外の文字
\s [[:blank:]] ホワイトスペース文字
\S [^[:blank:]] ホワイトスペース以外の文字
以下のように書くと、目指していた行が確実にヒットした。
^\A\+$
そこで、
%s/ / /g
v/^\A\+$/d
g/^\A\+$/call append(line('.'), '')
と、やると、最初に目指していた結果が「だいたい」得られた。うれしい!
(※ ただし「半角スペース文字」だけで構成された行は残る)
一行目は、まず、ファイル全体で「全角スペース文字」を「半角スペース文字」に替えている。
まだまだ、研究の余地はあるが、今日はここまで!
No comments:
Post a Comment