くふんを狙え(vimグループ) このページをアンテナに追加 RSSフィード

くふんを狙え

 | 

2008-07-07

!に渡す場合は % と # のエスケープが必要!

11:28 | !に渡す場合は % と # のエスケープが必要! - くふんを狙え(vimグループ) を含むブックマーク はてなブックマーク - !に渡す場合は % と # のエスケープが必要! - くふんを狙え(vimグループ) !に渡す場合は % と # のエスケープが必要! - くふんを狙え(vimグループ) のブックマークコメント

ライブドアブログ(livedoor Blog)| 読みたいブログが見つかるRe: rubyneko - vimで選択範囲をGoogle検索 - while ("im the true Vim master"); - vimグループ経由で知る。追加で、私もつっこみたい!

! に渡す場合は % と # のエスケープが必要!

Exコマンド上で % や # などの文字はファイル名に置換される。

:h cmdline-special
:h cmdline
:h :_%
:h :_#
:h :_##
http://d.hatena.ne.jp/eclipse-a/20080304/1204596336

「Exコマンド上で % や # などの文字はファイル名に置換される。」の表現はよくないです。コメント欄も参照のこと。

ka-nacht 2008/07/07 11:46 > Exコマンド上で % や # などの文字はファイル名に置換される。

より正確には「Exコマンドの引数において、それがファイル名である可能性がある場合、一部の文字列が別のものに置換される」です。

そうでないと:help :_%で%をエスケープしていないのに%のヘルプを引けるのはおかしいということなります。

http://vim.g.hatena.ne.jp/eclipse-a/20080707#c1215398808

あと、環境によっては勝手に解釈して直してくれるのかもしれないけど、日本語がうまく解釈されないなら、パーセントエンコードしてやったほうがいいかもしれない。そんな時は、

http://vim.g.hatena.ne.jp/eclipse-a/20080707/1215395816

で書いた encodeURI()/encodeURIComponent() を使ってやってくだしあ。以下、動作確認してないサンプルコード。


function! s:selected_text(...)
  let [visual_p, pos] = [mode() =~# "[vV\<C-v>]", getpos('.')]
  let [r_, r_t] = [@@, getregtype('"')]
  let [r0, r0t] = [@0, getregtype('0')]

  if visual_p
    execute "normal! \<Esc>"
  endif
  silent normal! gvy
  let [_, _t] = [@@, getregtype('"')]

  call setreg('"', r_, r_t)
  call setreg('0', r0, r0t)
  if visual_p
    normal! gv
  else
    call setpos('.', pos)
  endif
  return a:0 && a:1 ? [_, _t] : _
endfunction

function! s:char2hex(c)
  if a:c =~# '^[:cntrl:]$' | return '' | endif
  let r = ''
  for i in range(strlen(a:c))
    let r .= printf('%%%02X', char2nr(a:c[i]))
  endfor
  return r
endfunction

function! s:encodeURI(s)
  return substitute(a:s, '[^0-9A-Za-z-._~!''()*#$&+,/:;=?@]',
        \ '\=s:char2hex(submatch(0))', 'g')
endfunction

function! s:encodeURIComponent(s)
  return substitute(a:s, '[^0-9A-Za-z-._~!''()*]',
        \ '\=s:char2hex(submatch(0))', 'g')
endfunction

function! s:Akkery()
  let cmd = 'start cmd /c firefox -url'
  let url = 'http://www.google.co.jp/search'
  let enc = 'utf-8'
  let q = 'q=' . s:selected_text()
  let q = s:encodeURIComponent(iconv(q, &enc, enc))
  let url = s:encodeURI(iconv(url, &enc, enc))
  let url = url . iconv('?', &enc, enc) . q
  execute escape(printf('!%s %s', cmd, url), '%#')
endfunction

vnoremap <CR> :<C-u>call <SID>Akkery()<CR>

ka-nachtka-nacht2008/07/07 11:46> Exコマンド上で % や # などの文字はファイル名に置換される。
より正確には「Exコマンドの引数において、それがファイル名である可能性がある場合、一部の文字列が別のものに置換される」です。
そうでないと:help :_%で%をエスケープしていないのに%のヘルプを引けるのはおかしいということなります。

eclipse-aeclipse-a2008/07/07 11:53了解!修正しました!(コメントに対して確認しました的なスターがつけれたらいいのに)

LottaLotta2011/11/22 22:24You are so awesome for hlenpig me solve this mystery.

qfkyymsqfkyyms2011/11/24 18:20Y05FRI <a href="http://bfatlfbhdfcm.com/">bfatlfbhdfcm</a>

mwiztsqqzjumwiztsqqzju2011/11/24 22:28KKimzZ , [url=http://cwlljqmvwezo.com/]cwlljqmvwezo[/url], [link=http://jhcpmnkwqtes.com/]jhcpmnkwqtes[/link], http://iyluzavqmpwn.com/

cjmuqkcjmuqk2011/12/01 00:082QhAIW <a href="http://lrxblxzzhmbk.com/">lrxblxzzhmbk</a>

ndgeuqndgeuq2011/12/04 23:50K6oDVG , [url=http://nkhlevazuvqo.com/]nkhlevazuvqo[/url], [link=http://ushtqbbkcefk.com/]ushtqbbkcefk[/link], http://koyjoorikknz.com/

トラックバック - http://vim.g.hatena.ne.jp/eclipse-a/20080707
 | 
最近のコメント
最近のトラックバック
Error : RSSが取得できませんでした。
カレンダー
<< 2008/07 >>
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
カウンター
250083