読者です 読者をやめる 読者になる 読者になる

みごとに上書きされてました

先日、元々をプレフィックスにしたmapに対して、spaceをleaderに設定してに設定したら、最初に実行するCDが動作しなくなったよー。と書いたのですが、これもミスでした…

大方、gsなどがどこかで上書きされただけだと思います。

:verbose map

などを実行してチェックしてみてください。
<Leader>の目的 - Re: leaderをスペースに割り当てた時の挙動 - Guyon Diary - while ("im the true Vim master"); - vimグループ

風のような速さでレスを頂いたとおりに*1verboseを使って表示してみると

:verbose map gs

n  <Space>gs   * :GitStatus<CR>
        Last set from ~/.vim/plugin/git.vim
ov <Space>gs   * :CD<CR> :GitStatus<CR>
        Last set from ~/.vimrc

うっ...あった。
プラグインの方で設定されていました。

nnoremap <Leader>gd :GitDiff<Enter>
nnoremap <Leader>gD :GitDiff --cached<Enter>
nnoremap <Leader>gs :GitStatus<Enter>
nnoremap <Leader>gl :GitLog<Enter>
nnoremap <Leader>ga :GitAdd<Enter>
nnoremap <Leader>gA :GitAdd <cfile><Enter>
nnoremap <Leader>gc :GitCommit<Enter>

そうかぁ、leaderでは遠いからvimrcに同じようなmap設定を追加したのだったかぁ・・・
それで、leaderを指定すると駄目だったのか。
とんでもないお騒がせ野郎ですね。ちょっとヘコみました。んぁぁぁ。

mapはあえてgit.vimのほうを消してvimrcの方を活かすことにしました。

複数コマンドの実行

他にも赤ペン先生を頂いたので、修正してコミットするなどしました。
またもやってしまったmapの範囲系。

" ":CD<CR> :GitStatus<CR>"では<Space> (:help <Space>)が実行されてしまう。
" {rhs}はそのまま実行されるということに注意。
nnoremap <Space>gs  :CD \| GitStatus<CR>

&lt;Leader&gt;の目的 - Re: leaderをスペースに割り当てた時の挙動 - Guyon Diary - while ("im the true Vim master"); - vimグループ

複数コマンドの実行でこのパイプを使った方法を最初やりたかったんだけど、なぜか「後ろに余計な文字あるよ」ってエラーになってしまい、四苦八苦しても解決できなかったのでで連続した方法にかえたという経緯があったのですが、できるという事がわかれば再びチャレンジです。

ですが、やはりエラーが発生。
helpを引きまくってなんとか原因に辿り着く事が出来ました。

:h :bar
							*:bar* *:\bar*
'|' を使ってコマンドを区切ることができる。これにより一行に複数のコマンドを書き
込める。引数に '|' を使いたいときは、'\' を前に置くこと。

以下のコマンドは '|' を引数として認識するため、後に他のコマンドを続けることは
できない。
    :argdo
    :autocmd
    :bufdo
""""""""""""""""""""...続く

なるほど、コマンドによってはbarで区切る事ができないのかぁ。ということはCDの定義がまずかったという事か。

:h :command
特殊なケース

特殊なケースがいくつかあります:

	-bang	    コマンドは!修飾子を取ることができます(:qや:wのように)
	-bar	    コマンドは"|"を使用して別のコマンドを続けて実行することが
		    できます。引数に"|"を含めることはできなくなります。"がコメ
		    ントの開始になってしまうことにも注意してください。

なるほどcommandに「-bar」を指定しないと駄目なんですね。

" カレントディレクトリに移動
command! -bar CD  execute 'lcd' expand('%:p:h')

とすると、パイプを使って連続したコマンドを使えるようになりました。
やった。 :-)

*1:ありがとうございました。