背景
世の中のエンジニアのalias設定
こんな記事を書いたついでに、vimrcについても気になったので調べてみました。
せっかくなので、こちらは解説(主にvimdoc-jaの引用)付きで紹介していきます。
(反響がよければプラグイン編とかもやってみたいです)
対象
- GitHub上のdotfilesトピックがついたリポジトリ
- スター数順に上位1000リポジトリ
- 対象ファイルは
*vimrc
とinit.vim
.vimrc
やnvimrc
、hoge.vimrc
等も含む
- 総ファイル数644ファイル
例によって、このリポジトリを使いました。
reireias/dotseeker
集計方法
- 対象のファイルをローカルにダウンロード
- 先頭の空白は除去
- 末尾のコメントと空白も除去
- 下記に合致するものは除外
if
,else
,endif
,function
,endfunction
等の制御構文autocmd!
(自動コマンドの除去、クリーンナップ的な用途なので)
コマンドは下記になります。
# ちょっと最初のgrepは非効率かもgrep-r-h-E"^" files --color=none --include="*vimrc" | sed-e's/^[ \t]*//g'-e's/[ \t]*$//g' | grep-v-E"^$" | grep-v-E"^\\\\"> rc.txt
grep-r-h-E"^" files --color=none --include="*init.vim" | sed-e's/^[ \t]*//g'-e's/[ \t]*$//g' | grep-v-E"^$" | grep-v-E"^\\\\"> init.txt
# 自作のフィルターで末尾のコメントを除去しているwc-l< *.txt | cat - *.txt | ./comment_remove.py | sed-e's/[ \t]*$//g' | grep-v-E"^(if|endif|endfunction|autogroup|else|autocmd\!|au\!|augroup|endfor)" | sort | uniq-c | sort-nr | head-n 30
設定を入れた際との比較用に何も設定していない場合の表示も置いておきます。
(ファイルはなんとなくでrubyのテキトーなサンプルです)
備考
vimのバージョンは下記です。(普段はneovimなので、vim8が手元にありませんでした)
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Nov 24 2016 16:44:48)
また、ターミナルアプリのカラーを少しいじっているので、シンタックスの色は読者の手元の環境と異なると思います。
登場数ランキング
1位 set number
(489回/644ファイル)
毎行の前に行番号を表示する。
やはり第1位はこれ!!!
そのまんまですね。行番号が表示されます。
vimはコマンドで行数を使ったりするので、必須ですね。
2位 set expandtab
(474回/644ファイル)
挿入モードで を挿入するとき、代わりに適切な数の空白を使う。
また、コマンド '>' や '<' によるインデントや、オプション 'autoindent' がオンのときのインデントでも空白を使う。
'expandtab' がオンのときに本当のタブを挿入するには、CTRL-V を使うこと。
タブキーで入力した際に、代わりにスペース2つとか4つを入力してくれる設定です。autocmd FileType
と組み合わせてファイルタイプごとに設定することが多いです。
例:goはタブ、jsはスペース2つ、pythonはスペース4つ等
3位 set hlsearch
(461回/644ファイル)
前回の検索パターンが存在するとき、それにマッチするテキストを全て強調表示する。
検索結果のハイライトです。
下記の画像は/def
で検索しています。
4位 set ignorecase
(458回/644ファイル)
検索パターンにおいて大文字と小文字を区別しない。
/hello
と検索すると、hello
にもHello
にもHELLO
にもヒットします。
5位 set incsearch
(457回/644ファイル)
検索コマンドを打ち込んでいる間にも、打ち込んだところまでのパターンがマッチするテキストを、すぐに表示する。
マッチした文字列は強調表示される。
いわゆるインクリメンタルサーチです。
下記画像は/d
まで入力した場合です。(エンターはまだ押していません)
6位 set smartcase
(412回/644ファイル)
検索パターンが大文字を含んでいたらオプション 'ignorecase' を上書きする。
小文字で検索した場合は、大文字小文字の違いは無視、大文字を含む文字列で検索した場合は無視しない、といった検索になります。
7位 set laststatus=2
(402回/644ファイル)
最下ウィンドウにいつステータス行が表示されるかを設定する。
0: 全く表示しない
1: ウィンドウの数が2以上のときのみ表示
2: 常に表示
画像のようにファイル名等の情報を表示するステータスバーが追加されます。
カスタマイズ次第ではこんなにいろいろ表示できます。
8位 set nocompatible
(399回/644ファイル)
VimをなるべくVi互換にするか、便利な機能を使えるようにするかを決定する。
これは、特別な種類のオプションである。
このオプションの値が変更されると、それに伴って他のオプションも変更されるからだ。
実はもうおまじないと化してる模様
set nocompatibleはもういらない
9位 syntax on
(372回/644ファイル)
次のコマンドで構文ハイライトが有効になる:
:syntax enableコマンド
:syntax enable
は現在の色設定を変更しない。
そのため、このコマンドを使用する前後にコマンド:highlight
で好みの色を設定することができる。
現在の設定を破棄して、デフォルトの色を設定させたい場合は次のコマンドを使用する:
:syntax on
シンタックスハイライトを有効にします。
シンタックスハイライトなしのエディタでコーディングする人とか、現代にいるのでしょうか?
10位 set autoindent
(363回/644ファイル)
新しい行を開始したとき (挿入モードで を打ち込むか、コマンド "o"や "O" を使ったとき)、新しい行のインデントを現在行と同じくする。
要は改行した時に、同じレベルのインデントにしてくれます。
タブでもスペースでもよきに計らってくれます。
これなしでコーディングはきついですね。
11位-20位
- 11位
filetype plugin indent on
(360回/644ファイル)
:filetype plugin on と :filetype indent on を行った状態になる。
ファイルタイプの自動検出、ファイルタイプ用の プラグインとインデント設定 を自動読み込みするようになる。
- 12位
set showcmd
(344回/644ファイル)
コマンド (の一部) を画面の最下行に表示する。
ノーマルモードで入力したコマンドが右下に表示されるようになります。
- 13位
set background=dark
(341回/644ファイル)
値が "dark" のときは、Vimは暗い背景によく合う色を使おうとする。
値が "light" のときは、Vimは明るい背景によく合う色を使おうとする。
その他の値は無効である。
- 14位
set wildmenu
(335回/644ファイル)
オンのとき、コマンドライン補完が拡張モードで行われる。
15位
call plug#end()
(329回/644ファイル)- 最も利用されているプラグイン管理はvim-plugのようです
plug#begin
がランクインしてないのは、引数にとるパスが各々異なるためでしょう- なお、パスを無視してgrepしたところ、
plug#begin
は363回、dein#begin
は26回の登場でした
16位
set hidden
(320回/644ファイル)
オフのときは、バッファは放棄 |abandon| されるときに解放される。
オンのときは、バッファは放棄 |abandon| されるときに隠れ (hidden) 状態になる。
そのバッファが別のウィンドウでまだ表示されているなら、もちろん隠れ状態にはならない。
- 17位
set backspace=indent,eol,start
(307回/644ファイル)
挿入モードでの
<BS>
,<Del>
,CTRL-W
,CTRL-U
の働きに影響する。
値はキーワードのコンマ区切りのリストである。
それぞれのキーワードがバックスペースの働く対象を定めている。
値 効果
indent autoindent を超えてバックスペースを働かせる
eol 改行を超えてバックスペースを働かせる (行を連結する)
start 挿入区間の始めでバックスペースを働かせるが CTRL-W と CTRL-U は挿入区間の始めでいったん止まる
- 18位
set ruler
(301回/644ファイル)
カーソルが何行目の何列目に置かれているかを表示する {訳注: これをルーラーと呼ぶ}。
- 19位
set showmatch
(294回/644ファイル)
閉じ括弧が入力されたとき、対応する開き括弧にわずかの間ジャンプする。
- 20位
set cursorline
(278回/644ファイル)
カーソルがある画面上の行をCursorLineで強調する。
カーソルを目立たせるのに便利。スクリーンの再描画が遅くなる。
ランキング全体
とりあえず上位50位と登場回数を下記に載せておきます。
あとでgistに全体を上げる予定です。
489 set number
474 set expandtab
461 set hlsearch
458 set ignorecase
457 set incsearch
412 set smartcase
402 set laststatus=2
399 set nocompatible
372 syntax on
363 set autoindent
360 filetype plugin indent on
344 set showcmd
341 set background=dark
335 set wildmenu
329 call plug#end()
320 set hidden
307 set backspace=indent,eol,start
301 set ruler
294 set showmatch
278 set cursorline
266 set mouse=a
254 set noswapfile
254 set encoding=utf-8
251 set shiftwidth=4
247 set autoread
244 set shiftwidth=2
238 set undofile
236 set tabstop=4
230 set nobackup
220 set splitright
218 set t_Co=256
215 set splitbelow
215 Plug 'tpope/vim-fugitive'
212 set tabstop=2
211 set list
211 Plug 'tpope/vim-surround'
206 set lazyredraw
204 syntax enable
203 set smarttab
191 set nowrap
190 set smartindent
188 set noshowmode
171 set title
171 set relativenumber
170 set ttyfast
165 Plug 'airblade/vim-gitgutter'
159 set showmode
153 set noerrorbells
151 set softtabstop=4
151 return
まとめ
春は新たなvimmerが多く誕生する季節ですね。
そんな方々の参考になれば幸いです。