screen と vim の憂鬱
screen でいっぱい window つくって vim 立ち上げまくったりしていると、よく「スワップが残ってるよ、既にどっかで vim ひらいてるよ」と怒られるのです。しかしながら僕は C-z でバックグランドに飛ばしまくるので、どこの window でうごいているのか頑張らないとわかりません。僕は頑張りたくありません。とても困りました。だから僕は、それを解決する方法を考えました。
まずは、pid から、そのプロセスがどこの window で動いているかを知るために、以下のようなことをします。
# .zshrc
# window num -> tty の対応ができるように
tty > /tmp/screen-tty-$WINDOW# pid2screen
#!/usr/bin/env ruby
require "pathname"
pid = ARGV[0]
tty = `/bin/ps -o tty= -p #{pid}`.strip
win = Pathname.glob("/tmp/screen-tty-*").find {|i| i.read[tty] }
if tty.empty? || !win
exit 1
else
puts win.to_s[/\d+$/]
exit 0
endこれで、pid2screen [pid] すると pid から該当のウィンドウ番号が表示されるようになります。(なければ exit 1)
そして、vim のラッパを書きます。すこし長いのでレポジトリに直接リンクをはりますね。
内容的には
- swp ファイルがあったら、それを読んで pid を抜きだす
- その pid で pid2screen する。
- 結果があるならその window にとばす
という感じです。window に飛ばしてさらにそのファイルをアクティブにしたいところですが、いい方法が浮かびませんでした。悲しいです。でも、とても便利になりました。嬉しいです。