unite-vimpatches の内容を Vim で読みこむようにしてみた

以前作った unite-vimpatches ですが、ブラウザで開くのではなくて Vim で読みこむようなアクションを追加してみました。
次のように設定すれば Vim で内容を開くようになります。

call unite#custom#default_action("source/vimpatches/*", "openbuf")

http://gyazo.com/b3115d3b27ec026795643fe057bef64b.png


バッファの生成周りあんまり理解してないのがつらい。

Vim で bash の reverse-i-search のようなことを行う

そんな話が Lingr の Vim 部屋で出ていたので。


" <C-r> で unite-history/command を起動
" 選択するとコマンドラインに選択したコマンドが挿入される
" unite.vim と vim-unite-history が必要
cnoremap <C-r> :Unite history/command -start-insert -default-action=edit<CR>

http://i.gyazo.com/4479150a33ebee0c084e509fc51572ee.png


上の設定を行ってからコマンドライン を押すと unite-history/command が起動してインクリメンタルにコマンド履歴を検索する事ができます。
地味に便利そう?
コマンドライン 上書きするとかないわー

Vim script でリストの範囲にリストを代入する

Lingr で話が出ていたので覚書。

let list = range(10)
let list[3:6] = [-1, -2, -3, -4]
echo list
" => [0, 1, 2, -1, -2, -3, -4, 7, 8, 9]
" :help E711
                            *E711* *E719*
:let {var-name}[{idx1}:{idx2}] = {expr1}        *E708* *E709* *E710*
            リスト|List|の一部を式{expr}の値で置き換える。{expr}の
            値は正しい個数の要素を持つリストでなければならない。
            {idx1}を省略すると0となる。
            {idx2}を省略するとリストの末尾となる。
            指定された範囲の一部がリストの末尾を越える場合、要素が
            追加される。


知らなかった。

Vim から現在開いているファイルをコミットする

ちょっと編集したファイルを毎回端末開いてコミットするのが手間だったので適当にラッパーコマンドを定義してみた。

" Commit {コミットメッセージ}
command! -nargs=* Commit echo system("git commit " . expand("%:p") ." -m " . shellescape(<q-args>))


Commit {コミットメッセージ} で現在のファイルをコミットします。
さっとコミットしたい場合い便利。

Vim のシンタックスハイライトで他のシンタックスよりも優先してハイライトする

毎回設定する度に忘れるので覚書。
書いたあとに書いたことすら忘れそうだけど


さて、例えば、次のようなシンタックスハイライトを設定するとします。

" aaa を highlight Error でハイライト
syntax match Error /aaa/


上の設定を行うと
http://i.gyazo.com/c161ea46e8f8a72b75f40db4b925bb82.png
こんな感じにハイライトされるんですが、この時にコメントや文字列リテラルのハイライトよりも優先してハイライトして欲しい場合があります。

[解決]

こういう場合は containedin=ALL を使用することで解決する事ができます。

syntax match Error containedin=ALL /aaa/

http://i.gyazo.com/81170c3642b19072b9a3e74b38b8e81c.png


これで他のシンタックスハイライトよりも優先してハイライトを行うことができます。
Vimシンタックス周りは結構細かく制御する事ができるんですが、その分意図した設定をするのがむずい…。

unite.vim のプロンプトの位置による違い

たまにハマる人がいるようなので簡単にまとめてみた。

  • 候補順が逆
  • マークした後に上にカーソルが移動する
  • -auto-resize になる(候補の数によって自動的にウィンドウの高さが変わる)


また、下に split された場合は自動的にプロンプトが下に来ます。
プロンプトの位置は :Unite コマンドの -direction オプションで制御することができます。

" プロンプトを上に
Unite -prompt-direction=top
" プロンプトを下に
Unite -prompt-direction=below

neosnippet.vim のマーカーを常に表示させる

この間の Vimプラグイン読書会で話に出ていたので覚書。
さて、neosnippet.vim のマーカー(カーソルのジャンプ先)は syntax の conceal によって制御されています。
conceal を使用することでユーザ側が表示・非表示の制御を 'conceallevel' にて行うことができます。

" マーカー(conceal)を非表示にする
set conceallevel=3

[問題]

conceal が neosnippet.vim だけで使用されているのであれば問題ないのですが、他のプラグインでも使用されている場合に問題が出てきます。
例えば indetLine でも使用されており、このプラグインの性質上 conceal を非表示にして使用する必要があります。
そうすると neosnippet.vim のマーカーも非表示になってしまい、しばしば不便になります。

[解決]

常に表示させたいのであれば conceal を設定している syntax ごと無効にするのがよさそうです。

" 削除する適当なタイミングが思いつかなかったので…
autocmd InsertLeave * syntax clear neosnippetConcealExpandSnippets


これで conceal が設定されている neosnippet.vim の syntax が削除され常に表示されるようになります。