vimperatorrcがいい感じになってきたので晒し

タイトル通りである。

# plugin
##vimppm
vimppmとはvimperatorプラグインを簡単に管理することができるプラグインだ。
以下のサイトでGitHubへのリンク及び、使い方の紹介がされている。

[Vimperator プラグインマネージャを作ってみた - cd01's blog](http://cd01.hatenablog.jp/entry/2013/10/17/233530)

###使い方
1. GitHubからvimppmを適当な場所にクローンしてきて.vimperatorrcで読み込む。
2. .vimperatorrcに管理したいプラグインを列挙。
3. Firefoxを起動して`:vimppm install`
4. アップデートしたいときは`:vimppm update`


たったこれだけ。

先ずは、適当にクローン。

```bash
cd ~/.vimperator
mkdir vimppm
cd vimppm
git clone git://github.com/cd01/vimppm
```

.vimperatorrcでvimppmを読み込み、管理したいプラグインを列挙。

```vim
" ===========================
" Plugins
" ===========================
source ~/.vimperator/vimppm/vimppm/plugin/vimppm.js
" Github list
vimppm 'cd01/vimppm'

" Vimpr list (only js file)
vimppm '_libly.js'
vimppm '_smooziee.js'
vimppm 'copy.js'
vimppm 'caret-hint.js'

```

vimppmに続いてプラグイン名を書いておくと、ソースがある場合だけ読み込んでくれる。
直接単体ファイルを書き込めば、後述する`:vimppm install`を実行した時に、自動的にVimprからgit cloneしてくれる。

あとはFirefoxを起動して以下コマンドを入力すれば、.vimperatorrcに列挙したプラグインの中で、まだインストールしていないものだけをgit cloneしてくれる。

```
:vimppm install
```

各プラグインをアップデートしたいなら以下コマンド。
こちらはいわゆる強制インストールであり、既にインストールされていてもgit cloneするだけのようだ。

```
:vimppm update
```

ちなみに削除には対応していないので、プラグインを削除したいときは`~/.vimperatorrc/vimppm`配下の該当プラグインをまるごと削除する。
まぁ、中身はGitだしね:-)
更にvimppmでの管理も必要ないなら`.vimperatorrc`から該当プラグインの記述を消せばいい。

## _smooziee.js
j, kの移動を滑らかにしてくれる。
### 使い方

以下のグローバル変数の値を変える。
ただし、いつものようにmapしてはいけない。

```vim
" ===========================
" Variables
" ===========================
" _smooziee.js
let g:smooziee_scroll_amount="100"
let g:smooziee_scroll_interval="15"
```

smooziee_scroll_amountは移動量。
smooziee_scroll_intervalは移動にかかる時間。
※`map j 5<C-e>` のようなmapを記述しないこと！

## copy.js
有名ドコロなので今更説明はいらないように思える。

```vim
" ===========================
" Scripts
" ===========================
" copy.js
javascript <<EOM
	liberator.globalVariables.copy_templates = [
		{label: 'anchor', value: '<a href=\"%URL\">%TITLE%</a>'},
		{label: 'hamlAnchor', value: '%a{href: \"%URL%\"} %TITLE%'},
		{label: 'slimAnchor', value: 'a(href=\"%URL%\") | %TITLE%'},
		{label: 'jadeAnchor', value: 'a(href=\"%URL%\")%TITLE%'},
		{label: '', value: ''},
		{label: 'htmlblockquote', value: '<blockquote cite=\"%URL%\" title=\"%TITLE%\">%HTMLSEL%</blockquote>'},
		{label: 'selanchor', value: '<a href=\"%URL%\" title=\"%TITLE%\">%SEL%</a>'},
		{label: 'title', value: '%TITLE%'},
		{label: 'titleAndUrl', value: '%TITLE%\n%URL%'},
		{label: 'markdown', value: '[%TITLE%](%URL%)'}
	];
EOM
```

とは言いつつ説明しちゃうわけだが、`value:`に書いた通りのものを`:copy <labelName>`で呼び出せるだけである。
そう頻繁に使うものでもないと思って、キーマップはしていない。

# 設定
以下がメイン設定部分。よくある設定だ。

```vim
" ===========================
" Settings
" ===========================
set focuscontent
set visualbell
highlight Bell display:none
set hintchars=hjklasdfgyuiopqwertnmzxcvb
set defsearch=duckduckgo
set suggestengines=duckduckgo
set complete=sSltf
style! -name=commandline-ime chrome://* #liberator-commandline-command input {ime-mode: inactive;}
```

変なところといえば、デフォルトの検索エンジンをDudkDuckGoにしている点くらいだろうか。
DuckDuckGoは追跡しない検索エンジンという特徴を謳っており、古き良きGoogleを髣髴とさせる簡素さが魅力的だ。
DuckDuckGoはデフォルトの設定のままではローカライズされていない検索結果になってしまうので、DuckDuckGoの設定をしておこう。

[DuckDuckGo](https://duckduckgo.com/)にアクセスして、右上の設定ボタンから拡張設定を開く。
- 地域: japan
- 言語: 日本の日本語
上記の設定を変更して、一番下の「保存して終了」をクリックすればOKだ。

# キーマップ

```vim
" ===========================
" key maps
" ===========================
map <C-,>l :panorama<Space>list<CR>
map <C-,>t :panorama<Space>add<Space>
map <C-,>!t :panorama!<Space>add<Space>
map <C-,>p :panorama<Space>pulltab<Space>
map <C-,>!p :panorama!<Space>pulltab<Space>
map <C-,>s :panorama<Space>stash<Space>
map <C-,>!s :panorama!<Space>stash<Space>
map <C-,>d :panorama<Space>remove<Space>
map <C-,>, :panorama<Space>swich<Space>

noremap ,s :tabopen<Space>duckduckgo<Space>
map ,r :source<Space>~/.vimperatorrc<CR>

inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>

cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
cnoremap <C-f> <Right>
cnoremap <C-b> <Left>
cnoremap <C-y> <C-v>
```

特徴的なのは`:panorama`（タブグループ）だろうか。
自分はタブグループを頻繁に使うので、キーにマップしている。
タブグループについては[Tab Groups Helper](https://addons.mozilla.org/ja/firefox/addon/tab-groups-helper/?src=api)というアドオンをメインに使っていて、これらのキーバインドは補助的なものに過ぎない。
いつかはTab Groups Helperアドオンにvimperetorからアクセス出来るようにしたいけど、プラグイン書く知識ない。

あと、コマンドモード時のキーバインドがデフォルトのままではお粗末だったので、それっぽくしている。

ちなみにwindowsも`.vimperatorrc`で全く問題ないので、`source ~/.vimpreratorrc`をキーバインドに登録している。

# カラースキーマ
それほど凝ったものではないので.vimperatorrcに直接書いている。
Hintのz-indexだけはちゃんと解説しておいたほうがいいと思うので以下に説明する。

`z-index: 2147483647;`← これはz-indexの最大値である。

メニューバーがサイト上部に固定されているサイトなどがよくあると思うが、時々ヒントモードでメニューバー上のヒントだけ隠れて見えないという状況がある。
これはそのサイト製作者がメニューバーのz-indexを適当にでかい数字に割り振ったために起こる現象だ。
ふざけんな！と言いたいところだが、こちらも手の打ちようはある。

vimperatorのヒントモードのz-indexはどうやらデフォルトでは5000番に割り振られているらしく、これより大きいz-indexがあると当然隠れてしまう。
だから、Hintのz-indexを最大値に設定している。

参考 : [Unable to see Hint #'s in Wikia.com menubar · Issue #255 · vimperator/vimperator-labs · GitHub](https://github.com/vimperator/vimperator-labs/issues/255)

ただし、この設定も万能ではない。
メニューバーからプルダウンのようにコンテキストメニューを開くようなよくあるサイトでは、そのプルダウンメニューの裏側に隠れたリンクのヒントも見えてしまう。
場合によってはごちゃごちゃしてどのヒントが目的のリンクなのか解り難くなる。
なんかいい方法ないだろうか？


```vim
" ===========================
" color scheme
" ===========================
highlight Hint<<EOM
	z-index: 2147483647;
	margin-top: -4px;
	margin-left: -10px;
	padding 0px;
	width: 1.5em;
	line-height: 1.1em;
	background: #333333;
	box-shadow: 0 0 1px white, 4px 4px 5px black;
	border-radius: 1em;
	font-family: Arial;
	font-size: 16px;
	font-weight: bold;
	color: #cccccc;
	text-align: center;
	opacity: 0.7;
EOM

highlight HintActive<<EOM
	color: black;
	background: rgba(231,123,131,0.6);
	border-radius: 3px;
EOM

highlight HintElem<<EOM
	color: #333333;
	background: rgba(123,172,218,0.6);
	border-radius: 3px;
EOM

highlight Normal<<EOM
	color: #33FF33;
	background: #333333;
EOM

highlight StatusLine<<EOM
	background: #333333;
	color: #33FF33;
	font-weight: normal;
EOM

highlight CmdLine<<EOM
	transition: all 0.25s;
EOM

highlight ErrorMsg<<EOM
	color: white;
	background: red;
	font-weight: bold;
EOM

highlight WarningMsg<<EOM
	color: red;
EOM

highlight CompTitle<<EOM
	background: #252525;
EOM

highlight CompTitle>*<<EOM
	color: #EEEE55;
	text-shadow: 1px 1px 1px #DDDD44;
EOM
```

# .vimperatorrc全容
```vim
" ===========================
" Plugins
" ===========================
"vimppm is plugin manager
source ~/.vimperator/vimppm/vimppm/plugin/vimppm.js
" Github list
vimppm 'cd01/vimppm'

" Vimpr list (only js file)
vimppm '_libly.js'
vimppm '_smooziee.js'
vimppm 'copy.js'
vimppm 'caret-hint.js'

" ===========================
" Variables
" ===========================
" _smooziee.js
let g:smooziee_scroll_amount="100"
let g:smooziee_scroll_interval="15"

" ===========================
" Scripts
" ===========================
" copy.js
javascript <<EOM
	liberator.globalVariables.copy_templates = [
		{label: 'anchor', value: '<a href=\"%URL\">%TITLE%</a>'},
		{label: 'hamlAnchor', value: '%a{href: \"%URL%\"} %TITLE%'},
		{label: 'slimAnchor', value: 'a(href=\"%URL%\") | %TITLE%'},
		{label: 'jadeAnchor', value: 'a(href=\"%URL%\")%TITLE%'},
		{label: '', value: ''},
		{label: 'htmlblockquote', value: '<blockquote cite=\"%URL%\" title=\"%TITLE%\">%HTMLSEL%</blockquote>'},
		{label: 'selanchor', value: '<a href=\"%URL%\" title=\"%TITLE%\">%SEL%</a>'},
		{label: 'title', value: '%TITLE%'},
		{label: 'titleAndUrl', value: '%TITLE%\n%URL%'},
		{label: 'markdown', value: '[%TITLE%](%URL%)'}
	];
EOM

" ===========================
" Settings
" ===========================
set focuscontent
set visualbell
highlight Bell display:none
set hintchars=hjklasdfgyuiopqwertnmzxcvb
set defsearch=duckduckgo
set suggestengines=duckduckgo
set complete=sSltf
style! -name=commandline-ime chrome://* #liberator-commandline-command input {ime-mode: inactive;}

" ===========================
" key maps
" ===========================
map <C-,>l :panorama<Space>list<CR>
map <C-,>t :panorama<Space>add<Space>
map <C-,>!t :panorama!<Space>add<Space>
map <C-,>p :panorama<Space>pulltab<Space>
map <C-,>!p :panorama!<Space>pulltab<Space>
map <C-,>s :panorama<Space>stash<Space>
map <C-,>!s :panorama!<Space>stash<Space>
map <C-,>d :panorama<Space>remove<Space>
map <C-,>, :panorama<Space>swich<Space>

noremap ,s :tabopen<Space>duckduckgo<Space>
map ,r :source<Space>~/.vimperatorrc<CR>

inoremap { {}<LEFT>
inoremap [ []<LEFT>
inoremap ( ()<LEFT>

cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
cnoremap <C-f> <Right>
cnoremap <C-b> <Left>
cnoremap <C-y> <C-v>

" ===========================
" color scheme
" ===========================
highlight Hint<<EOM
	z-index: 2147483647;
	margin-top: -4px;
	margin-left: -10px;
	padding 0px;
	width: 1.5em;
	line-height: 1.1em;
	background: #333333;
	box-shadow: 0 0 1px white, 4px 4px 5px black;
	border-radius: 1em;
	font-family: Arial;
	font-size: 16px;
	font-weight: bold;
	color: #cccccc;
	text-align: center;
	opacity: 0.7;
EOM

highlight HintActive<<EOM
	color: black;
	background: rgba(231,123,131,0.6);
	border-radius: 3px;
EOM

highlight HintElem<<EOM
	color: #333333;
	background: rgba(123,172,218,0.6);
	border-radius: 3px;
EOM

highlight Normal<<EOM
	color: #33FF33;
	background: #333333;
EOM

highlight StatusLine<<EOM
	background: #333333;
	color: #33FF33;
	font-weight: normal;
EOM

highlight CmdLine<<EOM
	transition: all 0.25s;
EOM

highlight ErrorMsg<<EOM
	color: white;
	background: red;
	font-weight: bold;
EOM

highlight WarningMsg<<EOM
	color: red;
EOM

highlight CompTitle<<EOM
	background: #252525;
EOM

highlight CompTitle>*<<EOM
	color: #EEEE55;
	text-shadow: 1px 1px 1px #DDDD44;
EOM

" vim: set ft=vimperator:
```