ちょっとだけプログラミング向けプラグインも紹介

本連載の目的は、Linuxサーバを管理する手間を建設的に削減していくことだ。そのため、プログラミングに関しては範疇外なのだが、サーバ管理上、ちょっとしたスクリプトを書いたり、設定ファイルを編集したりすることはあるだろう。そこで今回は、Vimのプラグインのうちプログラミングに関するものを2つ紹介しておきたい。

取り上げるのは「vim-commentary」と「vim-fugitive」だ。どちらもVimのプラグインとしてはかなり有名なものであり、入れておいて損はない。特別な設定をすることなくプラグインを有効化するだけで使用できるし、なかなか便利なプラグインだ。

毎度のことながら、本連載でこれまでに作成してきたVimの設定ファイル(~/.vimrcファイル)を以下に掲載しておく。今回も、これをベースに編集を行っていく。

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=~/.cache/dein/./repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('~/.cache/dein/.')
  call dein#begin('~/.cache/dein/.')

  " Let dein manage dein
  " Required:
  call dein#add('~/.cache/dein/./repos/github.com/Shougo/dein.vim')

  " Add or remove your plugins here
  call dein#add('junegunn/seoul256.vim')
  call dein#add('vim-airline/vim-airline')
  call dein#add('vim-airline/vim-airline-themes')
  call dein#add('preservim/nerdtree')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

" seoul256
let g:seoul256_background = 233
colo seoul256

" vim-airline
let g:airline_powerline_fonts = 1
let g:airline_theme = 'molokai'

" NERDTree
"  <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>

"End dein Scripts-------------------------

set number
syntax on
set whichwrap=b,s,[,],<,>,~,h,l
set cursorline
set incsearch
set hlsearch
set ignorecase

コメントアウト/アンコメントのためのプラグイン - vim-commentary

プログラミングでは当然のことなのだが、設定ファイルの編集やシェルスクリプトの編集などでよく出てくるのが「コメントアウト」と「アンコメント」だ。

コメントアウトでは、ソースコードや設定をコメントに変更して無効化する。その場所に履歴としては残しておきたいものの、実際にソースコードや設定だと解釈して動作されては困るといった場合、コメント化することで無効にできる。逆に、コメント化を解除して元の状態に戻すことをアンコメントという。

Vimでも命令を駆使するとコメントアウト/アンコメントを自動化できるのだが、プラグイン「vim-commentary」を使うと、これを容易に実現することができる。

設定は簡単だ。まず、設定ファイル内で次の記述を探してほしい。

  call dein#add('preservim/nerdtree')

ここに、以下のように1行追加するだけでよい。

  call dein#add('preservim/nerdtree')
  call dein#add('tpope/vim-commentary')

vim-commentaryの操作は、非常にシンプルだ。コメントアウト/アンコメントしたい行、または範囲を選択してから「gcc」と入力するだけでよい。「gcc」と入力する度に、コメントアウトとアンコメントを繰り返し実行してくれる。

実行例を見てみよう。まず、次のようにコメントアウトしたい行を選択する。

コメントアウトしたい行を選択

この状態で「gcc」と入力すると、次のように選択した範囲がコメントアウトされる。コメントアウトの記述形式は、現在編集しているファイルの種類に応じて変化する。これも便利な点だ。

gccでコメントアウトされた後

今度はコメントアウトされた範囲をもう一回選択してみよう。

コメントアウトされた範囲を選択

この状態で「gcc」とすると、アンコメントされて元に戻る。

「gcc」でアンコメントされた後

このように、vim-commentaryプラグインを使えば、「gcc」だけ覚えておけばコメントアウト/アンコメントを素早く行える。コメントアウト/案コメントは意外と多用する操作なので、ぜひ利用してみてほしい。

Git操作のためのプラグイン - vim-fugitive

プログラマーならば、もはやGithub.com、そしてgitコマンドの利用は必須だろう。現在では多くのソフトウエアがGithub.comでホストされており、そこからソースコードを得るのにgitコマンドが使われているからだ。自分の開発しているソフトウエアのみならず、設定ファイルやドキュメントをGithub.comでホストすることも多い。

Githubはプライベートリポジトリの制限を緩くし続けており、現在ではかなりの作業をプライベートリポジトリでできるようになっている。プログラマーがこれを見逃すわけがなく、自前のデータの多くをGithub.comで管理するケースが増えている。使ってみるとわかるが、リソースの管理にGithub.comを使うととにかく便利なのだ。

業務利用の際は会社でGithub.comまたはGithub Enterpriseを導入していただきたいが、プログラマーはもちろん、サーバ管理者もまずは操作できるようになっておきたい。

Vimを使う場合もgitコマンドを使えばよいのだが、VimにはVimからgitを操作できるようにする「vim-fugitive」というプラグインがある。このプラグインを使うといちいちターミナルに戻る必要がなくなり、慣れるとかなり楽ができるのだ。

インストールするには、先ほどvim-commentaryプラグインを追加した部分に、さらに1行追加すればよい。

  call dein#add('preservim/nerdtree')
  call dein#add('tpope/vim-commentary')
  call dein#add('tpope/vim-fugitive')

vim-fugitiveには、基本的なコマンドとして次のようなものが用意されている。

操作 内容
:Git サブコマンド↩️ ターミナルで「git サブコマンド」を実行するのとほぼ同じ
:Gpush↩️ ターミナルで「git push 〜」と実行するのとほぼ同じ
:Gpull↩️ ターミナルで「git pull 〜」と実行するのとほぼ同じ
:Gdiff↩️ ターミナルで「git diff 〜」の結果を「vimdiff」で開くのとほぼ同じ
:Gwrite↩️ ターミナルで「git add 〜」と実行するのとほぼ同じ
:Gread↩️ バッファに「git checkout 〜」で持ってきたものを開くのとほぼ同じ
:Gcommit↩️ ターミナルで「git commit 〜」と実行するのとほぼ同じ
:Gmove↩️ ターミナルで「git mv 〜」と実行するのとほぼ同じ
:Gremove↩️ ターミナルで「git rm 〜」と実行するのとほぼ同じ

ちょっとしたサンプルを見てみよう。次のファイルはGithub.comで公開されているものだ。

Github.comでホストされているファイル(編集中の状態)

ファイルを編集していくと、元のファイルからどれくらい変更したのかを確認したくなることがある。vim-fugitiveを使っている場合、「:Gdiff」で確認することができる。

「:Gdiff」と入力

「:Gdiff」を実行すると、次のように「git diff」の結果を「vimdiff」で編集しているような状態になる。変更内容をざっと確認したい場合などには結構便利だ。

「:Gdiff」の実行結果

Linuxサーバの管理者は、これまであまりGithubに縁がなかったかもしれない。だが、これを機にGithub.comとgitコマンドの使い方も頭の片隅に入れておくとよいだろう。整理しなければと思いつつも、設定ファイルや作業ログなどを会社のファイルサーバに乱雑に置いたままだったり、手持ちのノートPCのハードディスクにしかデータがなかったり、というケースは意外とあるはずだ。Github.comで保管やバージョン管理を行うようにすると、かなり便利になる。こちらについてはおいおい取り上げるとしよう。

今回の成果物

実際に手を動かしながら本連載を読み進めてきた読者であれば設定済みのはずだが、もしプラグイン管理機能「Dein」のセットアップしていない場合は、プラグインを追加/利用する前にまず次の操作が必要だ。

mkdir -p ~/.cache/dein
cd ~/.cache/dein/
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
sh ./installer.sh .
rm ./installer.sh

Deinの詳細については、第229回を参照していただきたい。

最後に、コピー&ペーストしてそのまま使えるように、今回のプラグイン設定を追加した設定ファイルを掲載しておく。

"dein Scripts-----------------------------
if &compatible
  set nocompatible               " Be iMproved
endif

" Required:
set runtimepath+=~/.cache/dein/./repos/github.com/Shougo/dein.vim

" Required:
if dein#load_state('~/.cache/dein/.')
  call dein#begin('~/.cache/dein/.')

  " Let dein manage dein
  " Required:
  call dein#add('~/.cache/dein/./repos/github.com/Shougo/dein.vim')

  " Add or remove your plugins here
  call dein#add('junegunn/seoul256.vim')
  call dein#add('vim-airline/vim-airline')
  call dein#add('vim-airline/vim-airline-themes')
  call dein#add('preservim/nerdtree')
  call dein#add('tpope/vim-commentary')
  call dein#add('tpope/vim-fugitive')

  " Required:
  call dein#end()
  call dein#save_state()
endif

" Required:
filetype plugin indent on
syntax enable

" If you want to install not installed plugins on startup.
if dein#check_install()
  call dein#install()
endif

" seoul256
let g:seoul256_background = 233
colo seoul256

" vim-airline
let g:airline_powerline_fonts = 1
let g:airline_theme = 'molokai'

" NERDTree
"  <C-o> open NERDTree
nnoremap <silent> <C-o> :NERDTreeToggle<CR>

"End dein Scripts-------------------------

set number
syntax on
set whichwrap=b,s,[,],<,>,~,h,l
set cursorline
set incsearch
set hlsearch
set ignorecase