最近の更新

関連


その他いろいろ

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

はやくMODx 2.0でないかなあ

2009 06 20

vim_python

vimでpythonを有効にしてコンパイルすると、*.vimの中でpythonが使えるようになる。

python <<END
import vim
c = vim.current.window.cursor
command("normal F(")
bc = vim.current.window.cursor
vim.current.window.cursor = c
print bc
END

プログラム書いてて関数の引数リストを編集したいときに使えるテキストオブジェクト(citとかdawとかのあれ)を作りたかったが、最も単純にやるにしてもF(ct,とかF,ct)とか組み合わせが多くなる。
その上引数リストの区切りではないカンマや括弧に妨害されないように判定するのは難しそうなので、慣れないvimスクリプトよりはPythonで丸々書いてしまったほうが早そうと思って練習中です。

しかしテキストオブジェクトの作り方がよく分からん。ヘルプにはないようだが、surround.vim見て、それでもダメならソース見るかな。実は実装としては別にオブジェクトでも何でもない、表面上統一されたキーマップなだけかもしれない…


vim: Dvorak下でもノーマルモードはQWERTYを保つ
の改良です。

langmapを使用し、Dvorak配列使用時(拙作のdvorak.ahkなど)、ノーマルモードなどではQWERTYのように振る舞うスクリプトです。

すなわち、Dvorak配列のcキーを押すと、(QWERTYならこれはiの位置にあるので)挿入モードに移行する、といった挙動を示します。
挿入モードの中では普通にDvorakで入力できます。

dvorak.ahkと併用すると、このdvorak_langmap.vimで得られる効果とは別に、Ctrl修飾はQWERTYに変換される(
例えばDvorakのCtrl-g (QWERTYのCtrl-u)で半ページUpの動作になる)ので、
Ctrl-u/dや入力モード中でのCtrl-r、Ctrl-aなどもQWERTYの気分で使えます。
まあこの辺はそもそもキーの配置よりも、頭文字の意味で決められている感じがするので、わざわざQWERTYに戻す意味は薄いかも知れませんが。

尚、なぜかautocomplpop.vimと併用すると挿入モードで上手く動かないようです。


" dvorak_langmap.vim

" 1
set langmap=[-,]=,[_,]+,\\+,`\\|

" 2
set langmap+='q,\,w,.e,pr,yt,fy,gu,ci,ro,lp,/[,=]
set langmap+=\"Q,<W,>E,PR,YT,FY,GU,CI,RO,LP,?{,+}

" 3
set langmap+=aa,os,ed,uf,ig,dh,hj,tk,nl,s\\;,-'
set langmap+=AA,OS,ED,UF,IG,DH,HJ,TK,NL,S:,_\\"

" 4
set langmap+=\\;z,qx,jc,kv,xb,bn,mm,w\,,v.,z/
set langmap+=:Z,QX,JC,KV,XB,BN,MM,W<,V>,Z?

コメントでlangmapを教えてくださったkanaさま、ありがとうございます。

QWERTYからDvorakに移行する場合、問題になるのがviのキーバインド。Ctrl修飾で区別できるEmacsと違って、ノーマルモードでhjkl等を使うviは覚え直すことが多くなります。
そこでノーマル・ヴィジュアル・入力待ちではDvorakをQWERTY配列に変換するスクリプトを書いてみました。
dvorak.vim

これで本当に常時Dvorak縛りで練習できます。(ちなみにこの文もいらいらしながらDvorakで打っています)

追記: 考えてみたらfやtまで効くのはマズい。可能ならそのうち修正します

標準でありそうで(多分)ないので書いてみた。

nnoremap <C-K><C-K> cw<C-R>0<C-[>
nnoremap <C-K><C-I> ciw<C-R>0<C-[>

ciwを使っているのでVim7.0以降くらい。wbvesに変更すれば多分もっと前のバージョンでも動く。

2007 12 2

OpenGL補完辞書

近々GLをごりごり書くことになりそうなので、vimのn_C-X_C-K補完用のOpenGL辞書を作ってみました。

OpenGL dict

cat /usr/include/w32api/GL/*.h|sed -r '/^GL.*API/{s/.* \*?([a-zA-Z0-9_]+)\s*(\(|;).*/\1/;p};/^#define (GL|gl)/{s/#define ((GL|gl)[a-zA-Z0-9_]+).*?/\1/;p};d'|sort|uniq>gl.dict

(Cygwinの例。他の環境では/usr/include/w32apiの部分を適宜書き換える)

_vimrcに

autocmd BufRead *.c,*.h,*.cpp if search('<GL','n')>0|set dict=$VIMRUNTIME/dict/gl.dict|endif

と記述すると、OpenGLを使用するC/C++ファイルで辞書が有効になります。

GL, GLU, GLEXT, GLUT, GLEWで作ってみた例: gl.dict.gz
なぜか妙なvoidが残るので消してあります。

追記: あれこれやってGLEW on Cygwinに成功したので含めておきました&typo修正

gVim背景画像パッチのセンタリング不具合を修正し、20071127版を公開しました。
今回のバイナリはgVim7.1+KaoriYa版20071028にパッチを当てた物です。

GVim7 for Win32 background image patchを更新し、等倍表示時のセンタリング(縦横独立)に対応しました。

センタリングの例
センタリング

拡大縮小の例
拡大縮小

元画像 [happytreefriends.atomfilms.com (グロ注意)]

視認性のため、やる気を維持するため、Vimの背景にビットマップを表示するパッチを書きました。
タイル・等倍・拡大縮小に対応。
タイル表示の例
ダウンロードは以下のページから。Vim background image patch

vimで<C-W><C-W>でウィンドウ移動するのはよく使いますが、[count]<C-W><C-W>で[count]番目のウィンドウに移れることはあまり知られていないようです。というか自分が知らなかっただけか…

しかし縦だけ、横だけの分割なら左上から1,2,..とウィンドウ番号が振られますが、縦横に分割した場合は一目には番号との対応が分かりづらい。

そこでステータスラインにウィンドウ番号を表示すると少し便利になります。

set statusline=%{winnr('$')>1?':'.winnr().'/'.winnr('$'):''}

勿論これではファイル名も何も表示されなくなってしまうので、すでに書かれているものに適宜加筆します。

ついでにバッファ番号以下よくあるステータスラインとマージした例。

set statusline=[%n%{bufnr('$')>1?'/'.bufnr('$'):''}%{winnr('$')>1?':'.winnr().'/'.winnr('$'):''}] %< %f %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l/%L,%c%V%8P

同SS
vimステータスライン

ただ頻繁に使う1~3の数字がQWERTYではCtrlやWと近く、入力しにくいので<C-W>以外にもマップしておくといいかもしれません。

vimではCursorLine, CursorColumnグループをハイライトすることで罫線が引けますが、ウィンドウ分割するとすべてのウィンドウに表示されて鬱陶しいのでカレントウィンドウにのみ表示するようにしました。

罫線

" カレントウィンドウにのみ罫線を引く
augroup cch
  autocmd! cch
  autocmd WinLeave * set nocursorcolumn nocursorline
  autocmd WinEnter,BufRead * set cursorcolumn cursorline
augroup END

highlight CursorLine ctermbg=black guibg=black
highlight CursorColumn ctermbg=black guibg=black

少し見やすくなった…かもしれない。

« 前のページ次のページ »