2014年04月03日

hermitcrab.vim ―― シェル関係の設定を一括変更、或いは好みのシェルでコマンドを実行するVimプラグイン

この記事は、「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': ''
\	}
\ }

:HermitCrabSwitchhermitcrab#switch()を用いると、シェル関係の設定をg:hermitcrab_shellsに定義した内容に一括変更出来ます。

" Zshに変更する例
:HermitCrabSwitch ZSH

:set shell?    " == 'zsh'

:HermitCrabRunhermitcrab#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

g:hermitcrab_shells

当プラグインで切り替えるシェル関係設定に名前を付けます。

辞書変数です。キーはそのシェル関係設定群に付ける名前です。また、値は実際の設定内容になり、それは設定の名称をキーに、設定値を値とする辞書です。

'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さんの担当である。

posted by 天井冴太 at 16:00| Comment(0) | TrackBack(0) | 自作ソフト | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください

この記事へのトラックバック