Vimで定形文字列を挿入するスクリプトをPython3で書く

はじめに

こんにちは、野村です。

今回は、Vimで定形文字列を挿入するスクリプトをPython3で書いてみます。

いろいろ応用ができるのですが、基本は文字列挿入。ではないでしょうか?

スクリプト

デレクトリ「~/.vim/plugin/」内にファイル「ZZZ.vim」を作成しました。
内容は以下の通り。

function! ZZZ#html()
python3 << EOF
import vim
import re
htm = '''<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>TITLE</title>
</head>
<body>
</body>
</html>
'''
line = int(vim.eval("line('.')"))
ht = re.split(r'\n',htm)
for i,h in enumerate(ht):
  vim.current.buffer.append(h, line+i-1)
EOF
endfunction

function! ZZZ#css()
python3 << EOF
import vim
import re
htm = '''* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -o-box-sizing: border-box;
  -ms-box-sizing: border-box;
  box-sizing: border-box;
}
.cf:after {
  content: "";
  clear: both;
  display: block;
}
body{
  font-family:"ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, Osaka, sans-serif;
}
'''
line = int(vim.eval("line('.')"))
ht = re.split(r'\n',htm)
for i,h in enumerate(ht):
  vim.current.buffer.append(h, line+i-1)
EOF
endfunction

使い方

コマンドモードに入って「:call ZZZ#html()」もしくは「:call ZZZ#css()」と入力してEnter。

解説

基本はこんな感じです。

function! ZZZ#YYY()
python3 << EOF
import vim
import re
tmpl = '''
ここに
文書のテンプレートを
書き込む
'''
line = int(vim.eval("line('.')"))
ht = re.split(r'\n',tmpl)
for i,h in enumerate(ht):
  vim.current.buffer.append(h, line+i-1)
EOF
endfunction

・ZZZの部分はファイル名に合わせる。
・複数のファンクションを設定する場合は、#YYYの部分が必要。

終わりに

以上、Vimで定形文字列を挿入するスクリプトをPython3で書く方法を紹介しました。

本来はVimScriptという言語で書くものだけど、新たにVimScriptを習得するのが手間であればPython3で書くのがてっとり早いです。

とはいえ、PythonだけではVimを制御できません。
一応、『Vim script テクニックバイブル ~Vim使いの魔法の杖』(技術評論社)という本を手元に置いておくのもいいかも。僕も持ってます。

というわけで、今回はこれにて。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

野村 野村のプロフィール
枕は高いほうがいい。高いほうが本を読みやすいのですよ。なので広めのタオルケットを何重にも折りたたんでその上に枕を載せてその上に頭を載せてたりする。twitterやってます