VimのInsert mode completion (:help ins-completion) の終了方法は次の通り:
pumvisible()か?!pumvisible()か?いやー、はまったはまった。常に<C-y>でOKだと思っていたのですが、これだと!pumvisible()のときに別の動作 (直前の行にある文字を挿入する) になってしまいます。結果として補完は終了するものの、意図しない文字が挿入されてしまう場合があります。以前作成した入力補助のkey mappingsがしばしば妙な挙動をするので不思議に思っていたのですが、原因はこれだったか……
という訳で次のように対処しました:
inoremap foobar foo<C-x><C-o><C-r>=
\ <SID>KeysToStopInsertModeCompletion()
\ <Return>bar
function! s:KeysToStopInsertModeCompletion()
if pumvisible()
return "\<C-y>"
else
return "\<Space>\<BS>"
endif
endfunctionTTYShare始めました (my profile on TTYShare)。Vimに関する色々なデモを公開する予定です。目標はvimを一番人気のタグに持ち上げること (当面のライバルはgameとtypespeedの模様。nethackも怪しいな)。
いやー、もっと早く知ってればなぁ。端末上のデモならYouTubeよりこっちの方が良いに決まってます (ttyrecの録画データを公開することも考えていたのですが、その場で再生できないのと意味がないので止めていました)。ただ、現状だとttyrecの録画データを完璧に再生できない場合が多いのが難点です。その辺は今後に期待しています。個人的には、再生の一時停止、早送り/巻き戻し、再生位置等の状態表示、ttyplayの-nオプション相当の機能が実装されたらなー、と思っています。でも巻き戻しはかなり難しいか。
ところで、アカウントの各種設定項目の中にfavorite shellとfavorite terminalという項目があるのですが、一体どこで使われているのか凄く気になってます (まあちょっとしたジョークなのでしょうけどね)。
Twitter始めました (my profile on Twitter)。適当にfollowしたりされたりしてください。なお、発言は全て英語のみの縛りを入れてます。特に深い理由はないのですけど、最初の数回を英語でしたのがきっかけで何となくそのままに。
Twitterでは自分がfollowしているユーザーを「friend」と呼ぶのですが、一方的にfollowしてても「friend」と呼ばれるため、何か違和感を感じます。相互にfollowしているのであればそう呼んでもいいと思うのですけど。最初はこの「friend」の違和感からfollowするのに躊躇してました。
しかし、もっと早く始めれば良かったかなぁ……アカウント名のkanaが既に取られていました。こういうときにこのハンドルは不便なのですよね。次点としてYouTubeのアカウント名と同じwhileimautomatonを取ろうとしたのですが、これは字数制限オーバーで却下されました。今思えば、ここはxcezxさんに倣ってxkanaxとすべきだったのかも。
Web-based RSS reader、どれがいいんでしょうね? 自分の試した範囲だと:
Operaを使用していて駄目だと感じるところは次の2点:
もう一個、各種設定の保存/適用が完了するまで異様に時間がかかる (5秒以上かかる) 点が気になるのですが、これは恐らく自分の環境が原因なので何とも言えません (クリーンインストール直後だと一瞬で終わりますから)。でもどこが原因だろう……
他にもありますが、書く気力がなくなったので取り敢えずここまで。
buffuzzy 0.0.1をリリースしました。修正事項は次の通り:
xml_move 0.0.1をリリースしました。修正事項は次の通り:
余談ですが、どの移動コマンドもexclusiveです。つまり、operatorの範囲指定に使用した場合、移動後のカーソル位置の文字は範囲に含まれません。
xml_autons 0.0.1をリリースしました。修正事項は次の通り:
'report'より多くの行に渡って記述されている場合に6 lines yanked等のメッセージが表示されていました)。$HOME/.vimrc等の箇所で) それまでに設定されていたg:AutoXMLns_Dictの内容がデフォルト値で上書きされないように修正しました。こんな感じなのでデフォルトの状態だと作業効率がガタ落ちになる (特にキーボード的な意味で)。
OperaのUser JavaScriptの練習にと、取り敢えずBloglinesのショートカットキーをカスタマイズできるようなコードを書いてみました。JavaScriptはリファレンス首っ引きで適当に書いたので突っ込み歓迎。
// 変更したい機能名の一覧。
// 一覧にない機能のショートカットキーはデフォルトのまま。
// 機能名は次のどれか:
// allunread
// collapse
// foldercollapse
// keepnew
// nextfolder
// nextsub
// opennew
// openthis
// refresh
// scrolldown
// scrollup
var my_features = ['refresh'];
// 上記の機能に割り当てるキーの値の一覧。
var my_hotkey_refresh = [0x72, 0x71]; // rとqの両方でrefreshできるようにする。
function my_containsp(a, c) {
for (i in a) {
if (c == a[i]) {
return true;
}
}
return false;
}
window.opera.addEventListener('BeforeScript',
function (e) {
for (i in my_features) {
e.element.text = e.element.text.replace(
new RegExp('whichCode == g_hoe?tkey_'+my_features[i]),
'my_containsp(my_hotkey_'+my_features[i]+', whichCode)'
);
}
},
false
)変数と関数がグローバルなので座りが悪いのですが、何か良い方法はないかなぁ。該当ソースコードの書き換えで実現している以上、ローカルにすると書き換えたコードから参照する方法がない……はず。
余談: BloglinesのJavaScriptのコードを見てみると、openthisのキーを表す定数の名前がg_hoetkey_openthisで吹きました。だって「ほえっとキー」ですよ。
記事の未読/既読管理を考えるとRSSリーダーを使った方が比較的便利かと思って、少し前からBloglinesを使ってみているのですが、アカウントの管理が面倒なのではてなRSSの方にしようかなと思ったりもします。
でもはてなRSSはショートカットキーがOperaのもの (のうち、自分が設定したもののほとんど) とかなり被るのでほとんど使えません。どうにかできないものかとOperaのUser JavaScriptのチュートリアルを眺めつつ、オーバーライドする手段を考えていたのですが……
var addKeybind = Navigation.addKeybind;
addKeybind('j', notRepeated(countable(Entry.goNext)));
addKeybind('k', notRepeated(countable(Entry.goPrevious)));
addKeybind('m', Entry.readMore);
addKeybind('b', Entry.toggleBookmarkComments);
addKeybind('a', notRepeated(Entry.goTop));
addKeybind('e', notRepeated(Entry.goBottom));
addKeybind('n', notRepeated(countable(Group.goNext)));
addKeybind('p', notRepeated(countable(Group.goPrevious)));
addKeybind('i', notRepeated(Entry.focusBookmarkCommentInput));
if (Hatena.RSS.displayMode != 'antenna') {
addKeybind('d', countable(Entry.deleteActiveItem));
addKeybind('u', countable(Entry.undoItemDeletion));
addKeybind('x', notRepeated(Entry.togglePin));
addKeybind('o', Entry.openPinned);
}
addKeybind('q', Navigation.recordMacro);
addKeybind('@', notRecoreded(countable(Navigation.executeMacro)));
addKeybind('.', notRepeated(countable(Navigation.repeatLastCommand)));何だそれは。特にcountable。時々挙動がおかしいと思ったら原因はそれか……
Vim (vi) においてモードを区別する理由は大体次のようなところだろう: