この記事は、「Vim Advent Calendar 2013」の124日目の記事である。
昨日はShougoさんの「あるVimmerのブログ: Web 製作者のための Sublime Text の教科書レビュー」だった。 Sublime Text ……使った事無いんだよね。どんなもんなんだろう?
なお、今までに当 Advent Calendar に天井冴太が投稿した記事は以下の2件である。
(The original picture is "Hank trying on shells | Flickr - Photo Sharing!" by Craig Cook. The License is CC BY-NC 2.0)
INTRODUCTION
hermitcrab.vimは、シェル関係の設定を一括変更する手段を提供します。また、好みのシェルでコマンドを実行する手段を提供します。
最新版
https://github.com/AmaiSaeta/hermitcrab.vim
以下GitHub上のReleasesページから利用したいバージョン(通常は最新の物を使って下さい)の圧縮ファイルをダウンロード。その中のtestディレクトリ以下のファイル以外を貴方の vimfiles (.vim) ディレクトリへ上書きして下さい。
Releases ・ AmaiSaeta/hermitcrab.vim
何らかのVimプラグインマネージャを利用している場合は、その設定方法に従って下さい。例えばNeoBundleであれば以下の通り。
NeoBundle 'AmaiSaeta/hermitcrab.vim'
USAGE
前もってg:hermitcrab_shells辞書変数に設定内容を記述しておきます。例えば次の例は、zsh用の設定を"ZSH"という名で、bash用の設定を"BASH"という名で参照出来るようにしています。
:let g:hermitcrab_shells = {
\ 'ZSH': {
\ 'shell': 'zsh',
\ 'shellcmdflag': '-c',
\ 'shellpipe': '2>&1 | tee',
\ 'shellslash': 1,
\ 'shellredir': '>&',
\ 'shelltemp': 0,
\ 'shellxquote': ''
\ },
\ 'BASH': {
\ 'shell': 'bash',
\ 'shellcmdflag: '-c',
\ 'shellpipe': '2>&1| tee',
\ 'shellquote': '',
\ 'shellredir': '>%s 2>&1',
\ 'shellslash': 1,
\ 'shelltemp': 1,
\ 'shellxquote': '',
\ 'shellxescape': ''
\ }
\ }
:HermitCrabSwitch
やhermitcrab#switch()
を用いると、シェル関係の設定をg:hermitcrab_shellsに定義した内容に一括変更出来ます。
" Zshに変更する例
:HermitCrabSwitch ZSH
:set shell? " == 'zsh'
:HermitCrabRun
やhermitcrab#run()
、hermitcrab#call()
で、任意シェルでコマンドを実行する事が出来ます。
let engine = &shell
" zshでlsコマンドを実行 (:!に相当)
:HermitCrabRun ZSH ls
echo engine == &shell " == 1; コマンド/関数実行後は元の設定に戻ります
" zshでlsコマンドを実行 (system()に相当)
:let result = hermitcrab#call('ZSH', 'ls')
INTERFACE
COMMANDS
:HermitCrabSwitch {name}
-
シェル関係の設定を、g:hermitcrab_shellsの内容に基づいて変更します。
{name}はg:hermitcrab_shellsのキーの何れかでなければなりません。
hermitcrab#switch()
のコマンド版です。 :HermitCrabRun {name} {command}
-
g:hermitcrab_shellsの{name}の設定で、シェルのコマンド{command}を実行します。
{name}はg:hermitcrab_shellsに設定したキーの何れかでなければなりません。
:!
に相当します。hermitcrab#run()
のコマンド版です。
FUNCTIONS
hermitcrab#switch({name})
-
シェル関係の設定を、g:hermitcrab_shellsの内容に基づいて変更します。
{name}はg:hermitcrab_shellsに設定したキーの何れかでなければなりません。
:HermitCrabSwitch
の関数版です。 hermitcrab#switch({options})
-
シェル関係の設定を、引数{options}の内容に基づいて変更します。
{options}はg:hermitcrab_shellsの値として設定する辞書と同じフォーマットです。
hermitcrab#run({name}, {command})
-
g:hermitcrab_shellsの{name}に相当する設定で、シェルのコマンド{command}を実行します。
{name}はg:hermitcrab_shellsに設定したキーの何れかでなければなりません。
:HermitCrabRun
の関数版です。 hermitcrab#run({options}, {command})
-
引数{options}に相当する設定で、シェルのコマンド{command}を実行します。
{options}はg:hermitcrab_shellsの値として設定する辞書と同じフォーマットです。
hermitcrab#call({name}, {command} [, {input}])
-
g:hermitcrab_shellsの{name}に相当する設定で、シェルのコマンド{command}を実行し、その結果を返します。
{name}はg:hermitcrab_shellsに設定したキーの何れかでなければなりません。
{input}が与えられた場合、その文字列を標準入力として扱います。
system()
に相当します。 hermitcrab#call({options}, {command} [, {input}])
-
引数{options}に相当する設定で、シェルのコマンド{command}を実行し、その結果を返します。
{options}はg:hermitcrab_shellsの値として設定する辞書と同じフォーマットです。
{input}が与えられた場合、その文字列を標準入力として扱います。
system()
に相当します。 hermitcrab#confirmShell()
-
現在のシェル関係の設定の内容を保持した辞書を返します。
返される辞書の形式はg:hermitcrab_shellsの値部分と同じ。即ち、名称をキーとし、その設定値を値とする辞書です。
VARIABLES
当プラグインで切り替えるシェル関係設定に名前を付けます。
辞書変数です。キーはそのシェル関係設定群に付ける名前です。また、値は実際の設定内容になり、それは設定の名称をキーに、設定値を値とする辞書です。
'shelltemp
'のように、有無効を切り替える設定は、有効化するならば1、無効ならば0を指定します。ここで省略された物は、Vimのデフォルト値が用いられます。
必ず、Vim起動時の値を保持する、そのシェル名('shell'からディレクトリパスを除いた物)をキーとする値が追加されます。
以下は、zshとbash用の値を設定する例です。
:let g:hermitcrab_shells = {
\ 'ZSH': {
\ 'shell': 'zsh',
\ 'shellcmdflag': '-c',
\ 'shellpipe': '2>&1| tee',
\ 'shellquote': '',
\ 'shellredir': '>%s 2>&1',
\ 'shellslash': 1,
\ 'shelltemp': 1,
\ 'shellxquote': '',
\ 'shellxescape': ''
\ },
\ 'BASH': {
\ 'shell': 'bash',
\ 'shellcmdflag: '-c',
\ 'shellpipe': '2>&1| tee',
\ 'shellquote': '',
\ 'shellredir': '>%s 2>&1',
\ 'shellslash': 1,
\ 'shelltemp': 1,
\ 'shellxquote': '',
\ 'shellxescape': ''
\ }
\ }
CHANGELOG
- 1.01.20140204
- オプション設定処理の変更
- 無限ループする可能性の除去
- 処理の効率化
- エスケープのし忘れを修正 [テストコード]
- オプション設定処理の変更
- 1.00.20130703
- 初版
以上で「Vim Advent Calendar 2013」の124日目の記事を終わる。
なお、明日125日目はgu4さんの担当である。