globashとvim server

globash。bashをfunctionでglobal -cやらなんやらで拡張してくれて、しかも短縮オプションでglobalにアクセスできてちょっとアドレナリンってやつ。こんなのあるって気付いてなかった。というか名前が楽しい。
どうせ普段はvimつかってるし、zshでもcompletionでやってくれるし、コマンド作っとけば済むし、、、なんだけれど、ちょっとシェルを使いながらあちこちに飛んで実験とかしながら、、、という用途だと案外便利(ちと強引)。
で、globashの機能の一つに、検索した候補をclientserverモードにしたEmacsに表示させることができる、というのがある。そういえば vim にも利用目的不明のserver機能あったなー、とか思い出して「嗚呼!」とうれしくなったんだけど、globashはvim serverには対応していらっしゃらない御様子。
ちょっと対応してみたりした。かなりの頻度で無意味かもだけど

globashの構成

これは単純。当然ながら単なるシェルスクリプト。実体は

exec bash --rcfile /etc/globash.rc

のように/etc/にある。

変更点

これに以下を追加。

*** 689,694 ****
--- 689,695 ----
                -v|-vi)         local EDITOR=vi; shift;;
                -l|-less)       local EDITOR=less; shift;;
                -e|-emacs)      local EDITOR='emacsclient --no-wait'; shift;;
+                 -m|-vim)        local EDITOR='vim --remote '; shift;;
                -g|-gozilla)    local EDITOR=gozilla; shift;;
                -n|-noedit)     local EDITOR=noedit; shift;;
                *)              echo "invalid option $1."

実践。。。

で、たとえばscreenとかtmuxとかで作業ウィンドウと別に

% vim --servername VIM

のように表示用vimを立ち上げておく。で作業ウィンドウにておもむろにglobash起動。
たとえばputtyのソースツリーにて

[/home/tkuro/Exp/putty-0.60] x ^ssh_pkt.*
>    1  ssh_pkt_addbyte  1622 ssh.c          static void ssh_pkt_addbyte(struct Packet *pkt, unsigned char byte)
     2  ssh_pkt_adddata  1607 ssh.c          static void ssh_pkt_adddata(struct Packet *pkt, void *data, int len)
     3  ssh_pkt_addstring 1651 ssh.c          static void ssh_pkt_addstring(struct Packet *pkt, char *data)
     4  ssh_pkt_addstring_data 1646 ssh.c          static void ssh_pkt_addstring_data(struct Packet *pkt, char *data, int len)
     5  ssh_pkt_addstring_start 1636 ssh.c          static void ssh_pkt_addstring_start(struct Packet *pkt)
     6  ssh_pkt_addstring_str 1641 ssh.c          static void ssh_pkt_addstring_str(struct Packet *pkt, char *data)
     7  ssh_pkt_adduint32 1630 ssh.c          static void ssh_pkt_adduint32(struct Packet *pkt, unsigned long value)
     8  ssh_pkt_defersend 1935 ssh.c          static void ssh_pkt_defersend(Ssh ssh)
     9  ssh_pkt_ensure   1597 ssh.c          static void ssh_pkt_ensure(struct Packet *pkt, int length)
    10  ssh_pkt_getdata  2100 ssh.c          static void *ssh_pkt_getdata(struct Packet *pkt, int length)
    11  ssh_pkt_getstring 2083 ssh.c          static void ssh_pkt_getstring(struct Packet *pkt, char **p, int *length)
    12  ssh_pkt_getuint32 2065 ssh.c          static unsigned long ssh_pkt_getuint32(struct Packet *pkt)

としたあと show -m とすればもう一つのウィンドウにそのコードが現れると。高度な検索を行いたいときはウィンドウを切り替えればよいというわけ。

まあまあ便利。

結論

GNU global サイコー!