while ("im the true Vim master");

2009-01-25

Re: 一つ前のタブに戻るKey mapping - 日々是鍛練

| 15:02

  • autocmd内でのexists()チェックは不要。
  • 変数のスコープは他所で使うのでなければグローバル(g:)よりスクリプトローカル(s:)にした方が良い。
  • この場合、<C-t>はモディファイヤーではなくプレフィックス。モディファイヤーはCtrlやShiftなどの単体で押しても意味がないキーのこと。
  • TabLeaveが先に発生し、TabEnterが後に発生する」というコメントはあった方が分かり易い(:help tab-page-otherに記述はあるけどTabLeave等の項目にはないので分かり難いことこの上ない)。
  • :tabonly実行後は期待通りの動作をしない。g:pre_tabnrに該当するタブページは存在しない場合があるから。
  • :tabmove実行後は期待通りの動作をしない。tabpagenr()で得られる番号は現在のタブページの状態における相対位置であり絶対的な識別番号ではない。そのため、:tabmoveの前後でメモされていた番号の意味が変わるから(これはwinnr()でも同じ)。

私も同じような機能を実装してプラグイン化しようかと思っていた時期がありましたが、:tabonlyと:tabmoveの問題で面倒臭くなって止めました。この2点に目を瞑ればid:yoppiblogさんのコードでOKなんですけど、何分、経質なもので。

タブページやウィンドウに対して絶対的な識別番号がないのは108あるVimの欠点の1つなのですが、どうしたらいいでしょうかね。独自にそのような番号を振っておいてそれを使うのは一つの手なのですが、今度はその独自の番号から:tabnext等用の番号に変換することが困難です(し、実際、現在のVimではそれができない)。独自の番号の管理も面倒ですし、かといってt:を使うとSEGVる可能性が高い。

2008-10-12

Re: VimでIMEのON/OFFをスマートに切り替えるには?

| 15:51

:help 'im<C-d>
'im'             'imc'            'ims'            'imsearch'       'imdisable'      'imactivatekey'
'imd'            'imi'            'imak'           'iminsert'       'imcmdline'

Re: Python 2.6のライブラリリファレンスをVimから引くmapping

| 15:48

nmap {your-favorite-keyseq}  <Plug>(pydoc)
nnoremap <Plug>(pydoc)  :<C-u>call Pydoc()<CR><CR>
function! Pydoc()
  let _ = getpos('.')
    call search('\_s\zs\S', 'bcW')
    execute '!open ''http://docs.python.org/library/'.expand('<cword>').'.html\#'.expand('<cWORD>').''''
  call setpos('.', _)
endfunction

The original code has several bugs that are:

  • Can't look up a keyWORD if the cursor is at the beginning of the keyWORD.
  • Allow unnecessary remapping.
  • Move the cursor to the end of the keyWORD.

There is no valid/right example of Vim script around the world, eh.

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20081012

2008-08-13

Re: ku#mru.vimを書いてみた - thincaの日記

| 13:20

何か期待されたので試しにku#mru.vimを書いてみた。

ku#mru.vimを書いてみた - 永遠に未完成

あまりの高速さに全私が吹いたのでコードレビュー兼コメントをしたいと思います。

ku#mru#mru_file()、ku#mru#time_format()、ku#mru#init()はスクリプト内でしか使われてないですし、スクリプト外部で使われるものではないですからs:init()などに改名してMisc.下に移動した方が良いと思います。

ku#mru#mru_file()とku#mru#time_format()はvimrcから値を設定するために公開されているようですが、vimrcからこれらの関数を呼ぶと起動時にautoload/ku/mru.vimがロードされることになり、autoloadの利点が失われます。g:ku_mru_time_formatなどのグローバル変数を利用する方が良いです(設定される値についてあれこれチェックをしたいというのであれば話は別なのですが、これはそうでもなさそうですから)。

Vim開始時の初期化ができない

ku#mru#init()のautocmdの定義のことですが、それはplugin/ku/mru.vim辺りに分離すべきです。確かにku本体がVimの起動時(VimEnterなど)のタイミングで適当な関数を呼ぶ形で面倒を見ることは不可能ではありません。しかし、そうするとku#mru#mru_file()と同様の問題が起こり、autoloadの利点が失われます。なので「本体側が呼ぶ機能」は追加する予定はありません。

そもそもMRUに関するAPIを別のプラグインとして独立させて、それを利用する形にした方が色々と便利な気がしますね。誰か作りませんか?

任意のソートができない?

未実装です。source独自の優先度を追加したりユーザー側でカスタマイズできるようにはしたいのですけど、それに関するデザインで色々と悩んでいるのです。

~/.vimruってこの名前はないよな

……ある! 「びむる」は個人的にはアリだと思いました。ただ~/下に直接置くのはアレなので、~/.vim/以下のどこかに置いた方が良いとは思います。その辺りは好みによるところが多いですから、そのためのku#mru#mru_file()なのでしょうね。

thincathinca2008/08/13 13:17使おうと思ったのは、http://vim.g.hatena.ne.jp/ka-nacht/20080808/1218206182でやばいって言ってたから気になったのです。
徹夜してku-mruを書いたのは、普段あまり人から期待されないんで舞い上がっちゃっただけです。
ただそれだけです。ちなみに、夏期休暇のなせる技なので普段は無理です><

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20080813

2008-07-31

Re: rubyneko - vimで検索文字列がハイライトされたままなのはイヤですよね

| 12:59

nnoremap <Esc><Esc> :<C-u>set nohlsearch<Return>

をしていた。これだとesc*2でハイライトを消せてとても便利。

…なんだけど、nとかで再検索したときにまたハイライトされるのが結構困るところ。

ライブドアブログ(livedoor Blog)| 読みたいブログが見つかる

その設定例と問題点は矛盾してます。元々の設定は

nnoremap <Esc><Esc> :nohlsearch<Return>

でした。そうでないと問題点で挙げている動作は起きません。

ujihisaさんの要求は「一時的にハイライトを消した場合、n/Nによる移動では再度ハイライトしないようにする」なので後述されているような設定になります。

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20080731

2008-07-28

ftplugin/changelog.vimは爆発すべき

| 15:45

nnoremapで':'と';'を入れ替えるとchangelogの<Leader>oが効かなくなる - 日々是鍛練」を読んで気になったので確かめてみました。

--- changelog.vim.orig  2008-07-28 15:15:07.000000000 +0900
+++ changelog.vim       2008-07-28 15:15:11.000000000 +0900
@@ -217,7 +217,7 @@
   endfunction

   if exists(":NewChangelogEntry") != 2
-    map <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR>
+    noremap <buffer> <silent> <Leader>o <Esc>:call <SID>new_changelog_entry()<CR>
     command! -nargs=0 NewChangelogEntry call s:new_changelog_entry()
   endif

@@ -237,7 +237,7 @@
   unlet s:cpo_save
 else
   " Add the Changelog opening mapping
-  nmap <silent> <Leader>o :call <SID>open_changelog()<CR>
+  nnoremap <silent> <Leader>o :call <SID>open_changelog()<CR>

   function! s:open_changelog()
     if !filereadable('ChangeLog')

何がどう悪いのかは「Vim: Key mappingを極める - while ("im automaton");」で勉強してね!

それと、無駄にグローバル変数を使っている。爆破したい。

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20080728
最近のコメント
あわせて読みたいブログパーツ
AX