Vimのquickfix関連のコマンドはデフォルトでどのキーにもマップされていないので適当に追加してみました。quickfixなのでq{action}の形に統一。キーボードマクロqは滅多に使わないのでQへ降格。Ex-mode Qは絶対に使わないので存在しないことにしました。
nnoremap Q q nnoremap qj :cnext<Return> nnoremap qk :cprevious<Return> nnoremap qr :crewind<Return> nnoremap qK :cfirst<Return> nnoremap qJ :clast<Return> nnoremap qf :cnfile<Return> nnoremap qF :cpfile<Return> nnoremap ql :clist<Return> nnoremap qq :cc<Return> nnoremap qo :copen<Return> nnoremap qc :cclose<Return> nnoremap qw :cwindow<Return> nnoremap qp :colder<Return> nnoremap qn :cnewer<Return> nnoremap qm :make<Return> nnoremap qM :make<Space> nnoremap qg :grep<Space> nnoremap q <Nop>
以前は次のように割り当てていたのですが、頻繁かつ連続して使うものではないので削除しました。
nnoremap <C-j> :cnext<Return> nnoremap <C-k> :cprevious<Return>
SEGVを再現するスクリプトは次の通り:
command! Segv call SegvReady()
function! SegvReady(...)
let s:saved_args = a:000
endfunction
function! SegvGo()
" SEGV at this echo.
echo s:saved_args
endfunction:Segvを実行した後でSegvGo()を呼び出すとSEGVります。また、SegvReady()を呼び出した後でSegvGo()を呼び出すとechoされる結果が異なるか変な挙動になります。
取り敢えずの回避策はa:000の値はその関数内だけで使うこと。後でバグレポートを出しておこう。いやー、どの辺が原因か分かり易いバグで楽しかった。
Vim 7でユーザー定義関数の可変長引数a:000の使い方によってはSEGVるバグを発見しました。今のところ再現率100%。現在、再現に必要な最小限の条件を調査中です。
Vimのバッファ名補完の動作が変なのは仕方がないとして、取り敢えずはエスケープしないバッファ名補完をするようにして問題を回避しました。なお、以下のものはオリジナルの補完と違ってワイルドカードが使えないのですが、バッファ名補完でワイルドカードを使う必要性はないので無視してます (元々、入力内容を名前の一部に含むバッファが補完されるのですから)。
command! -complete=customlist,Complete_UnescapedBufferName -nargs=1
\ Buffer buffer <args>
cnoremap <expr> b<Space> getcmdtype()==':' && getcmdpos()==1 ? 'Buffer ' : 'b '
function! Complete_UnescapedBufferName(ArgLead, CmdLine, CursorPos)
let candidates = []
for name in GetAllListedBufferNames()
if stridx(toupper(name), toupper(a:ArgLead)) != -1 " case-insensitive
call add(candidates, name)
end
endfor
return candidates
endfunction
function! GetAllListedBufferNames()
let names = []
let i = 1
while i <= bufnr('$')
if buflisted(i)
call add(names, bufname(i))
endif
let i = i + 1
endwhile
return names
endfunction通常、:bufferは:bと入力するので、それを:Bufferにマッピングしています。こうすると今までの入力パターンはそのままで代替コマンドに置き換えられるのですが、出力の微妙な違いが気になります。この辺はさすがに諦めるしかないかなぁ。
Vimのバッファ名補完の動作が変です。補完されるバッファ名に特定の文字が含まれている場合、それはバックスラッシュでエスケープされるのですが、不要な文字までエスケープされる場合があります。しかも場合によってはエスケープされないこともあり、よく分かりません。
具体的には以下のような動作になります:
プラスがエスケープされてしまうとエラーE64となってしまうのでかなり不便です。というか、何故それまでの状況によって補完結果が変わるのか分かりません。
cereja 0.0a3をリリースしました。主にトレイ関係を修正・改善しました。
Operaで最近追加したショートカットキーその2:
[Application] '=Enter access key mode | Leave access key mode
viで指定したマークへジャンプするときのイメージに近そうだったので試しに追加してみたのですが、それなりに便利です。これまでaccess keyは全然使っていなかったのですが、これのおかげで使用率がほんのり上がった気がします。
Operaで最近追加したショートカットキー:
[Browser Window] semicolon=Focus address field | Focus message list
viでexコマンドを打つときのイメージに近そうだったので試しに追加してみたのですが、これが案外良い。サーチエンジンの設定をきちんとしておけばなかなか快適です。
よりviっぽくするならセミコロンよりもコロンにした方がいいのですが、今一上手く設定できなかったのでセミコロンにしてます (個人的には~/.vimrcでセミコロンをコロンと等価にしてるのでどちらでもいいのですけどね)。
所謂hack modeに入る前、石鹸を使って丁寧に手を洗うという癖があることに気が付きました。稀にしないときもあるのですが、十中八九はしてます。昔はそんなことはなか……あー……昔からやってる気がする。何時からだろう?
すさまじいドジが発覚しました。2007年1月頭からメールの送受信が不可能でした。多忙で自宅に帰らないこともしばしばあったので存在を半ば忘れていました。いや、最近全然メールが来ないなと多少は感じていたのですが……一ヶ月も経過してるとは。特に重要な連絡がなかったことが不幸中の幸いです。
原因はAVGを7.1から7.5へ更新したことでした。今までPersonal E-mail Scannerの設定の「Type of login」を「Automatic」にしており、問題なく動作していたのですが、7.5に変えてからは正しく動作していなかったようです。受信に関しては「Fixed host」にしてメールクライアントの設定も変えて対処できたのですが、送信に関してはまだできていません。送る用件もないし面倒だし忙しいしで放置中。