LoginSignup
50
53

More than 5 years have passed since last update.

最近不便に感じたことをVimで解決する

Last updated at Posted at 2014-02-13

これは何?

最近コードを実装するにあたって、不便に感じたことを Vim で解決する記事

  • 主に自分のリマインド用

コマンドラインの内容を編集したい

コマンドヒストリーを使う
Exモードで、<C-R> すると、コマンドヒストリーが表示される
コマンドヒストリーでは、コマンドの入力履歴を編集/検索/実行できる
ノーマルモードでは、q: q? q/ でコマンドヒストリーを表示

主なキーバインド

  • <enter> : カーソル直下のコマンドを実行
  • <C-C> : カーソル直下のコマンドを、コマンドラインに貼り付け

コマンドヒストリーウィンドウのサイズが小さくて見づらいので、20行表示する

" コマンドラインウィンドウの幅
set cmdwinheight=20

単語をレジスタに格納している文字列と置換したい

  • ye : 単語のヤンク(eは、スペースより前で止まる。wは、次の単語まで移動する)
  • vep : 単語の選択後そこにペースト

カーソル上の単語選択

  • viw → i : inner w : 単語選択
  • yiw → 単語ヤンク
  • uiE → 空白区切りヤンク
  • vi" → i : inner " : ダブルクォートの中身を選択
  • va" → a : a : ダブルクォートを含んだ検索

ダブルクォートの中をレジスタと置換

  • vi"p : ダブルクォートの中身を選択した後、ペースト

選択した単語をレジスタに格納している文字列に一括置換

以下を .vimrc に設定

" s*でカーソル下のキーワードを置換
nnoremap <expr> s* ':%s/\<' . expand('<cword>') . '\>/'
vnoremap <expr> s* ':s/\<' . expand('<cword>') . '\>/'

*s の後に <C-R>" する

:%s/\<word\>/ここにペーストされる

現在のファイルのカレントディレクトリからの相対パスをコピーする

CopyPath は、ファイル名と、絶対Pathだけなので BTS 等 にファイル名をコピーする時等に不便

command! CopyRelativePath
\ let @*=join(remove( split( expand( '%:p' ), "/" ), len( split( getcwd(), "/" ) ), -1 ), "/") | echo "copied"
:CopyRelativePath
  • ../ とかでカレントディレクトリの外に出ているファイルの場合正しく動作しない
  • もっと良い方法がある気がする

参考

50
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
53