FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

macvimでCtrl-:(コロン)やCtrl-;(セミコロン)を使う

こんにちは@toshikimiyagawaです。
最近会社のPCをmacにしました。
それとともにメインエディタをemacsからvimにしてみました。

f:id:taketor:20150722151958p:plain
ただ、emacsからvimに乗り換えるにあたって困ったことが1点ありました。
emacsではCtrl-;にother-window-or-split
Ctrl-:にanythingを割り当てていました。
しかし、vimではCtrl-;やCtrl-:にコマンドを割り当てられないようです。
これらのキーバインドは体に染み付いちゃってるので、vimでも同じ動きしてほしいし、
こんな特等席にあるキーを有効利用しない手は無いので、無理矢理割り当ててみます。

必要なソフトのインストール

vim

もちろん最初はvimからですね。
今回はGUI版のvimを利用します。
こちらに日本語ローカライズされた良さげなvimがあるので、こちらをインストールします。

KeyRemap4MacBook

これであるキーバインドを別のキーバインドに割り当てることができます。
こちらからダウンロードしてインストールします。

KeyRemap4MacBookの設定

必要なソフトをインストールしたら次はKeyRemap4MacBookの設定をします。
これにより、Ctrl-;などのvimが認識できないキーバインド
Ctrl-Option-Aなどといったvimが認識できて、
かつあまり使わないだろうと思われるキーバインドに置き換えます。
f:id:taketor:20150722152153p:plain

まず起動するとこのような画面が出てきます。
上のタブのMisc & Uninstallをクリックしましょう。

f:id:taketor:20150722152209p:plain
するとこのような画面が出てくるので、Open private.xmlをクリックして、
Finderに出てくるprivate.xmlを開きます。

開いてprivate.xmlを以下のように書き換えましょう。

<?xml version="1.0"?>
<root>
	<appdef>
		<appname>MACVIM</appname>
		<equal>org.vim.MacVim</equal>
	</appdef>
	<item>
		<name>Vim Keybind</name>
		<item>
			<name>vim keybind</name>
			<identifier>private.com.vim.MacVim.keybind</identifier>
			<autogen>__KeyToKey__ KeyCode::SEMICOLON, ModifierFlag::CONTROL_L, KeyCode::A, ModifierFlag::CONTROL_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L</autogen> 
			<autogen>__KeyToKey__ KeyCode::JIS_COLON, ModifierFlag::CONTROL_L, KeyCode::B, ModifierFlag::CONTROL_L | ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L</autogen> 
			<only>MACVIM</only>
		</item>
	</item>
</root>

f:id:taketor:20150722152235p:plain
保存した後Change Keyの画面でReloadXMLをクリックしてリロードすると
左のようにVim Keybindという項目が出てきますので、そこをクリックすると出てくる
vim keybindという項目にチェックを入れてください。

これでCtrl-;がCtrl-Option-A、Ctrl-:がCtrl-Option-Bに置き換えられます。

.vimrcの設定

最後に.vimrcに以下を追加します。
uniteのインストールは他のサイトを参考にしてください。
また<81>はCtrl-V,Ctrl-;で、<82>はCtrl-V,Ctrl-:で入力してください。

function OtherWindowOrSplit()
	if winnr("$") > 1
		:wincmd w
	else
		:vsplit
	endif
endfunction

noremap <81> :call OtherWindowOrSplit()<cr>
noremap <82> :Unite -vertical buffer file_mru directory_mru file<cr>

これでCtrl-;でOtherWindowOrSplitが呼び出され、Ctrl-:でUniteが呼び出されます。

それではみなさん快適なvim生活を。