Monday, August 7, 2017

Memo of editor vim 学習メモ

vimviをもとに開発されたフェイルエディタですが、viよりはるかにパワフルでもあります。

1.vimで複数のファイルからキーワードを検索する
1.1 基本的な使い方
:vimgrep pattern files
例えば、
:vimgrep key_word src/**/*
はsrcディレクトリの下にあるすべてのファイルから、key_wordの個所を検索する
:args `find . -type f`
:vimgrep /key_word1/ ##
:vimgrep /key_word2/ ##
:vimgrep /key_word3/ ##
は/key_word1/、/key_word2/、/key_word3/とそれぞれのキーワードを同じファイルタイプについて検索する。
:vimgrep /Ctrl_C// src/**/*
はひとつ前の検索対象キーワードでsrcの下にすべてのファイルを検索する。
:vimgrep /keyword/ *|cw
は現在開いているファイルの関数一覧から検索する。あるいは%を使う。

最初にマッチした場所へ移動したくない場合
:vimgrep /keyword/j *.txt
同様に、g オプションをつけると、すべて、マッチします。(デフォルトでは、それぞれの行に対して一度しかマッチしません)

大文字小文字を区別しないには、 \c を指定します。
:vimgrep /foo\c/ *
複数キーワードを検索するときに、
:vimgrep /\(keyword1\|keyword2\)/ *.c
ヘルプのgrepには専用のコマンドが用意されています。
:helpg[rep] keyword

"いつもcwコマンドを使用する場合は以下のように書けば省略できる。
au QuickfixCmdPost grep cw
au QuickfixCmdPost vimgrep c
lvimgrepもほぼ同じ機能のコマンドであり、その結果を見るには、lopenlwです。

他の検索コマンド
 agyagrepjvgrep、GNU grep、 fgrep、 egrep、 agrep等は利用できます。
 「set grepprg=yagrep\ -nH」という設定すればいいです。



1.2 検索結果の閲覧
以下のコマンドで検索結果の一覧を閲覧できる
:copen
あるいは、 :cp(cprev)、:cn(cnext) で前後の結果へジャンプできます。cwはcopenと同じコマンドです。


2.外部のプログラムやコマンドを実行
 「!」を付けて外部のプログラムやコマンドを実行できる。たとえば、
:!ls
3.ウィンドウを分割する
:split
でウィンドウを水平に分割する。簡略コマンドはss。垂直に分割するにはvsplit(簡略コマンドはsv)
Ctrl+w Ctrl+w
でアクティブウィンドウを切り替える。上下左右はそれぞれ、Ctrl+Wとk、j、h、lの組み合わせです。

ウインドウの幅を増やすには、Ctrl+w>、減らすには<を使います。
ウインドウの高さを増やすには、Ctrl+w+、減らすには-を使います。
ウインドウの大きさを揃えるには、Ctrl+w=を使います。
ウインドウを閉じるには、Ctrl+wcを使います。

4.関数名から関数の本体に飛ぶ方法
 変数なら、その変数の宣言箇所に飛びます。
 ctagsを使って、tagsファイルを作成し、vimでカーソルを関数名に持っていき、Ctrl+]で、対応関数の定義箇所に飛んで行けます。
 ctagsは"yum install ctags"などでインストールする必要あります。
 tagsファイルの作成は、バージョン管理システムのルート(gitならば、そのbranchのルート)の下でvimを立ち上げて、:TagsGenerate!を実行すればよいです。
 "ctags nout found"と言われるときに、~/.vimrcに"set tags=../.git/tags"のように、tagsのフォルダ位置を指定すればよいです。
  ctagsのvim内のコマンドは以下の通りです。

コマンド内容
ctrl-]関数・メンバの定義へ移動
ctrl-tまたは:popジャンプ前のファイルに戻る
gを押した後、Ctrl-]複数関数の定義がある場合、どれに行くか選択できる
ctrl-wを押した後、Ctrl-]横に分割してジャンプする
:tsまたは:tselectタグの分岐に戻って別に行ける
:tagsタグの履歴を調べる
:taまたはtagctrl-tの逆。これはショートカットがない。

5.tagbar関数や変数の定義参照をさらに楽にする
 tagbarはctagsに依存するvimのプラグインで、オフィシャルHPからダウンロードできます(zip)。
 プラグインをインストールしたら、~/.vimrcに以下の設定を追加すればよいです。
nmap <F8> :TagbarToggle<CR>
6.シェルコマンドを実行するには
 vimshellというプラグインを使います。
 但し、vimprocに依存するので、それをインストールする必要があります。
 インストールが済んだら、以下のコマンドで、vimのウインドウ内でシェルコマンドを実行できます。
:VimShell
7.複数のキー操作を楽にするには
 submodeというプラグインを使えば、ユーザが自由にサブモードを定義できます。

8.コメントなどの表示色変更指定するには
  例えばコメントを緑色で表示させるには、~/.vimrcに以下のように指定すればよい。
    hi Comment ctermfg=2
 あるいは、
    hi Comment ctermfg=gray
 使える色の名前は、:help hiで調べられます。

9.プラグインを管理するにはNeoBundle.vimを導入
  ~/.vimrcに以下のものを追加して、vimを立ち上げて、":NeoBundleInstall"をじっこうすれば、NeoBundle.vimを簡単に導入できます。
" Note: Skip initialization for vim-tiny or vim-small.
if 0 | endif

filetype off

if has('vim_starting')
  if &compatible
    set nocompatible               " Be iMproved
  endif

  set runtimepath+=~/.vim/bundle/neobundle.vim
endif

call neobundle#begin(expand('~/.vim/bundle/'))

" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc', {
  \ 'build' : {
    \ 'windows' : 'make -f make_mingw32.mak',
    \ 'cygwin' : 'make -f make_cygwin.mak',
    \ 'mac' : 'make -f make_mac.mak',
    \ 'unix' : 'make -f make_unix.mak',
  \ },
  \ }
NeoBundle 'VimClojure'
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'jpalardy/vim-slime'
NeoBundle 'scrooloose/syntastic'
NeoBundle 'Shougo/vimfiler.vim'
NeoBundle 'itchyny/lightline.vim'
NeoBundle 't9md/vim-textmanip'

NeoBundle 'Shougo/unite.vim'
NeoBundle 'ujihisa/unite-colorscheme'
NeoBundle 'tomasr/molokai'
""NeoBundle 'https://bitbucket.org/kovisoft/slimv'

call neobundle#end()

filetype plugin indent on     " required!
filetype indent on
syntax on

NeoBundleCheck
10.Gitとの連携
 fugitiveはその一つです。Gdiffで二つの画面でファイルを見比べられたり、Greadですべての変更を元に戻せたりします。
  Glogでは過去のcommit履歴を簡単に見ることができ、各バージョンのファイル全体を見ることができる
 まず、~/.vimrcに以下の内容を追加します。
NeoBundle 'tpope/vim-fugitive'
次に、vimを立ち上げて、以下のコマンドを実行します。
:NeoBundleInstall

参考リンク
[1] Vim pluginへの入門[NeoBundle.vim]
[2] vim-fugitiveがやっぱり便利
[3] Quickfixを知ってからfugitiveを使うと捗る
[4] 普段使いエディタをVimにする
[5]Vimで改行時の自動コメントアウトを無効化

No comments:

Post a Comment