2007-11-13
■ [ruby] ドライブレターの大文字/小文字が揃っていないとPathname#relative_path_fromが失敗する件
"c:\home" → "c:\tmp" はOK
"c:\home" → "C:\tmp" は不可
irb(main):002:0> home = Pathname("c:\home") => #<Pathname:c:home> irb(main):003:0> temp = Pathname("C:\temp") => #<Pathname:C: emp> irb(main):004:0> tmp = Pathname("c:\tmp") => #<Pathname:c: mp> irb(main):005:0> home.relative_path_from(tmp) => #<Pathname:../home> irb(main):006:0> home.relative_path_from(temp) ArgumentError: different prefix: "c:" and "C:\temp" from c:/prog/ruby/lib/ruby/1.8/pathname.rb:709:in `relative_path_from' from (irb):6
えー。そりゃないよ。
■ [vim] LustyExplorerをWindowsで使う方法
ファイル一覧やバッファ一覧を表示+タブ補完付きで選択できるプラグイン、LustyExplorerを入れてみましたよ。
手順:
- KaoriYa.netのVim7.1を入れる (7.0ではだめかも)
- http://www.vim.org/scripts/script.php?script_id=1890 からスクリプトをダウンロードして、$HOME\.vim\pluginとか、$HOME\vimfiles\pluginあたりに入れる
- 「\lf」でファイル一覧、「\lb」でバッファ一覧。キー入力でファイル候補選択、タブ補完あり。
別のディレクトリのファイルを開いているときは、「\lr」で「そっちのディレクトリの」ファイル一覧を表示してくれます。 便利。
良く使うコマンドだと思われるので、「,f」など適当なキーバインドで実行できるようにしておくと便利かも。
" Lusty Explorer/Juggler nmap <unique> <silent> ,b :BufferExplorer<CR> nmap <unique> <silent> ,f :FilesystemExplorer<CR> nmap <unique> <silent> ,r :FilesystemExplorerFromHere<CR> " nmap <unique> <silent> ,j :LustyJuggler<CR>
んで、Windows版だと:cdとかでディレクトリを移動したときに例のdifferent prefixなんちゃらが出る場合があるので、 やっつけパッチを書いてみました。
--- c:\tmp\lusty-explorer.vim Tue Nov 13 17:39:19 2007 +++ lusty-explorer.vim Tue Nov 13 17:11:21 2007 @@ -425,13 +425,21 @@ '[LustyExplorer-Buffers]' end + def force_downcase_driveletter(path) + if path.to_s =~ /\A[A-Za-z]:/ + path = Pathname(path.to_s.sub(/\A./){|c| c.downcase}) + else + path + end + end + def buffer_match_string pwd = Pathname.getwd name = if @curbuf_path.to_s.starts_with?("scp://") @curbuf_path.to_s else - @curbuf_path.relative_path_from(pwd).to_s + force_downcase_driveletter(@curbuf_path).relative_path_from(force_downcase_driveletter(pwd)).to_s end Displayer.vim_match_string(name, @prompt.insensitive?) @@ -461,7 +469,7 @@ name else path = Pathname.new VIM::Buffer[i].name_p - path.relative_path_from(pwd).to_s + force_downcase_driveletter(path).relative_path_from(force_downcase_driveletter(pwd)).to_s end @buffers[name] = VIM::Buffer[i].number @@ -1074,6 +1082,7 @@ @sidescroll = eva "&sidescroll" @sidescrolloff = eva "&sidescrolloff" + @reg = vim_single_quote_escape(eva('@"')) @reg0 = vim_single_quote_escape(eva("@0")) @reg1 = vim_single_quote_escape(eva("@1")) @reg2 = vim_single_quote_escape(eva("@2")) @@ -1117,6 +1126,7 @@ exe "set sidescroll=#{@sidescroll}" exe "set sidescrolloff=#{@sidescrolloff}" + exe "let @\" = '#{@reg}'" exe "let @0 = '#{@reg0}'" exe "let @1 = '#{@reg1}'" exe "let @2 = '#{@reg2}'"
後半はcho45さんのパッチが混ざってます。 ごめんなさい。でもこっちも当てといた方がいいよ多分。