スパム対策として書込み時にID/PWを要求されますが、ローマ字で ほげ/ホゲ で書き込めるようになります。

cabbrev の便利な使い方

  • ページ: tips
  • カテゴリー: その他
  • 投稿日: 2006-07-18 13:06:18 (火)

メッセージ

http://www.vim.org/tips/tip.php?tip_id=1285 より

:e コマンドの挙動が微妙に気に入らないので、改良を加えた
独自のコマンド E を作ったときなどは、コマンド名の
頭文字を大文字にしなければならないので、その分タイプしづらくなります。
そのようなときは以下の cabbrev を作っておくと、

cabbrev e <c-R>=(getcmdtype()==':' && getcmdpos()==1 ? 'E' : 'e')<cr>


:e<space>

まで入力したとき自動的に

:E 

に展開されて便利です。
getcmdpos() を使って、コマンドラインの1文字目が"e"であるときのみ展開されることに注意。
よって、普通に :e を使いたいときは

: e

のように先頭にスペースを入れます(もちろん、他にも方法はありますが)。

他にも色々な使い方ができます。

:e を入力したら自動的に <C-d> でリストを表示する

cabbrev e <c-R>=(getcmdtype()==':' && getcmdpos()==1 ? 'e <C-d>' : 'e')<cr> 

:grep を入力したら自動的にその後にカーソル下の単語を挿入する

cabbrev grep <c-R>=(getcmdtype()==':' && getcmdpos()==1 ? 'grep <C-r><C-w>' : 'grep')<cr>

:e を入力したら自動的にカレントディレクトリを挿入する

" ヘルプに載っている関数。:h abbreviations を参照。
func Eatchar(pat)
  let c = nr2char(getchar(0))
  return (c =~ a:pat) ? '' : c
endfunc 

" <C-r>=で展開する式が長すぎるとコマンドラインが2行になってしまうため、
" Cmdline_eという関数に分けている。
cabbrev e <C-r>=Cabbrev_e()<CR>

function! Cabbrev_e()
  if getcmdtype()==':' && getcmdpos()==1
    " 絶対パスを入力したいときは e/ とスペースを挟まないで入力すること。
    if Eatchar('\s') == "/"
     return "e /"
    endif
    let cwd = getcwd()
    if cwd == "/"
      return "e /"
    else
      return 'e '.substitute(cwd, $HOME, "~", "")."/"
    endif
  else
    return 'e'
  endif
endfunction


同様な cabbrev を簡単に定義するための関数とコマンド定義:

function! CommandCabbr( abbreviation, expansion ) 
 execute 'cabbr ' . a:abbreviation . ' <c-r>=getcmdpos() == 1 && getcmdtype() == ":" ? "' . a:expansion . '" : "' . a:abbreviation . '"<CR>' 
endfunction 
com! -nargs=+ CommandCabbr call CommandCabbr( <f-args> ) 

使い方:

CommandCabbr windo Windo
または
call CommandCabbr( 'wx', 'windo x' ) 

関連

同様のエイリアスを簡単に定義するためのスクリプト
cmdalias.vim - Create aliases for Vim commands. : vim online
http://www.vim.org/scripts/script.php?script_id=746





トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-10-14 (火) 01:13:17 (1350d)