もた日記

くだらないことを真面目にやる

Vimメモ : Neovimで開発環境を段階的に構築する(3)あいまい検索とGit連携

あいまい検索

ファイルを開くときや検索するときにあいまい検索ができると作業効率が上がるのでインストールしてみる。
以下のようなプラグインがあるがfzfが人気のようだ。

Repository スター数
junegunn/fzf 23011
junegunn/fzf.vim 3715
ctrlpvim/ctrlp.vim 3937
wincent/command-t 2323
Shougo/denite.nvim 1437

fzfがコマンドラインでも使えるコマンド本体でfzf.vimがvimとの連携プラグインなので両方インストールする。

Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'

インストール後に:help fzf-vim-commandsを実行すると使用可能になったコマンドの一覧が確認できる。

 -----------------+-----------------------------------------------------------------------
 Command          | List
 -----------------+-----------------------------------------------------------------------
  Files [PATH]    | Files (similar to  :FZF )
  GFiles [OPTS]   | Git files ( git ls-files )
  GFiles?         | Git files ( git status )
  Buffers         | Open buffers
  Colors          | Color schemes
  Ag [PATTERN]    | {ag}{6} search result ( ALT-A  to select all,  ALT-D  to deselect all)
  Rg [PATTERN]    | {rg}{7} search result ( ALT-A  to select all,  ALT-D  to deselect all)
  Lines [QUERY]   | Lines in loaded buffers
  BLines [QUERY]  | Lines in the current buffer
  Tags [QUERY]    | Tags in the project ( ctags -R )
  BTags [QUERY]   | Tags in the current buffer
  Marks           | Marks
  Windows         | Windows
  Locate PATTERN  |  locate  command output
  History         |  v:oldfiles  and open buffers
  History:        | Command history
  History/        | Search history
  Snippets        | Snippets ({UltiSnips}{8})
  Commits         | Git commits (requires {fugitive.vim}{9})
  BCommits        | Git commits for the current buffer
  Commands        | Commands
  Maps            | Normal mode mappings
  Helptags        | Help tags [1]
  Filetypes       | File types
 -----------------+-----------------------------------------------------------------------

例えば:Filesを実行するとカレントディレクトリ以下のファイルをあいまい検索で絞り込みながら選択できる。

f:id:wonder-wall:20190730222130p:plain

ripgrep(rgコマンド)を使っているのであれば:Rgによりあいまい検索ができる。

f:id:wonder-wall:20190730222208p:plain

他にも:Historyを実行すると過去に開いたファイルを検索できるので、以下のようなキーマッピングを追加することでファイルの切り替えが簡単になる。

nmap <C-p> :History<CR>

より詳細な使い方は下記記事を参照。

wonderwall.hatenablog.com

wonderwall.hatenablog.com

また、以下のプラグインをインストールするとカレントディレクトリをプロジェクトのルートディレクトリ(例えば.gitがあるディレクトリ)に自動で変更してくれるので検索が便利になる。

Repository スター数
airblade/vim-rooter 585
Plug 'airblade/vim-rooter'

Git連携

Git連携できるプラグインとしてvim-fugitiveがあり、コミットブラウザに特化したgitvやgv.vimといった拡張的なプラグインもある。

Repository スター数
tpope/vim-fugitive 11184
gregsexton/gitv 909
junegunn/gv.vim 643

下記行を追加してvim-fugitiveをインストールすると:Gblame:GdiffsplitなどGで始まるgitコマンドが使えるようになる。

Plug 'tpope/vim-fugitive'

:Gblameの例。 f:id:wonder-wall:20190730225816p:plain

:Gdiffsplitの例。 f:id:wonder-wall:20190730225859p:plain

Git差分表示

行単位の差分を左端に表示するプラグインとして以下のものがある。

Repository スター数
airblade/vim-gitgutter 5764
mhinz/vim-signify 1670

今回はvim-gitgutterをインストールしてみる。

Plug 'airblade/vim-gitgutter'

インストールが成功していれば差分に応じて+, -, ~といったシンボルが左端に表示される。

f:id:wonder-wall:20190730231318p:plain

デフォルトでは変更の反映までに4秒(4000ms)かかるので以下のように短く設定するのがよい。

set updatetime=100


ファイル単位での差分を表示したい場合はNERDTreeの拡張プラグインをインストールするのがよい。

Repository スター数
xuyuanp/nerdtree-git-plugin 1336
Plug 'xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' }

f:id:wonder-wall:20190730231554p:plain

まとめ

今回の~/.config/nvim/init.vim

call plug#begin('~/.vim/plugged')
Plug 'joshdick/onedark.vim'
Plug 'itchyny/lightline.vim'
Plug 'ntpeters/vim-better-whitespace'
Plug 'Yggdroot/indentLine'
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'majutsushi/tagbar', { 'on': 'TagbarToggle' }
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
Plug 'airblade/vim-rooter'
Plug 'tpope/vim-fugitive'
Plug 'airblade/vim-gitgutter'
Plug 'xuyuanp/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' }
call plug#end()

set number
set termguicolors
" airblade/vim-gitgutter
set updatetime=100

let g:python_host_prog = $HOME . '/.pyenv/versions/neovim2/bin/python'
let g:python3_host_prog = $HOME . '/.pyenv/versions/neovim3/bin/python'

" joshdick/onedark.vim
colorscheme onedark
" itchyny/lightline.vim
let g:lightline = {'colorscheme': 'onedark'}

" scrooloose/nerdtree
nmap <C-e> :NERDTreeToggle<CR>
" majutsushi/tagbar
nmap <F8> :TagbarToggle<CR>
" junegunn/fzf.vim
nmap <C-p> :History<CR>

実践Vim 思考のスピードで編集しよう! (アスキー書籍)

実践Vim 思考のスピードで編集しよう! (アスキー書籍)

wonderwall.hatenablog.com

wonderwall.hatenablog.com