Hatena::Groupsubtech

冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。

 | 

Jul 03, 2008 (Thu)

screenvim の憂鬱 23:13 はてなブックマーク - 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 に飛ばしてさらにそのファイルをアクティブにしたいところですが、いい方法が浮かびませんでした。悲しいです。でも、とても便利になりました。嬉しいです。

 | 

スポンサード リンク

書いてる人

cho45 (佐藤広央) (www.lowreal.net)

Perl, JavaScript, Ruby, HTML, CSS, Web etc


スポンサード リンク