Vim
"Vim は UNIX のデファクトエディタ ‘vi’ のパワーに、様々な機能を追加した、高機能なテキストエディタです。"
Vim はキーボードでの利用にフォーカスしており、シンタックスハイライトやスクリプト機能などの便利な機能を提供しています。Vim は nano や pico などの単純なテキストエディタとは異なります。学習するのに多少の時間を割く必要があり、マスターするためには山ほどの時間が必要です。
インストール
以下のどちらかのパッケージをインストールしてください:
- vim パッケージは Python 2/3, Lua, Ruby, Perl インタプリタをサポート、GTK/X サポートは除外。
- gvim パッケージは上の
vim
パッケージと同じものに加えて GTK/X サポートが付属。
使用方法
これは Vim の使用方法に関する基本的な概略です。また、vimtutor
もしくは gvimtutor
を実行すると25-30分ほどの vim のチュートリアルが起動します。
Vim には4つのモードが備わっています:
- コマンドモード: キー入力はコマンドとして解釈されます。
- 挿入モード: キー入力はファイルに挿入されます。
- ビジュアルモード: キー入力でテキストを選択・カット・コピーします。
- Ex モード: 追加的なコマンドのための入力モード (例: ファイルの保存, テキストの置換...)。
編集の基本
次のように Vim を起動すると:
$ vim somefile.txt
空のドキュメントが表示されます (somefile.txt が存在しない場合。存在するときは、その中身が表示されます)。このまま編集することはできません – 今いるのはコマンドモードです。このモードではキーボードを使って Vim にコマンドを実行させることができます。
i
コマンドで (カーソルの前に) テキストを挿入します。I
(大文字の i) は行の最初にテキストを挿入します。テキストの追記 (カーソルの後ろにテキストを記述、ほとんどの人が予期するであろう挿入) には a
を使います。A
を入力するとカーソルが行末に置かれます。
Esc
を押すことでいつでもコマンドモードに戻ることができます。
移動
Vim では、矢印キーを使ってカーソルを移動することができますが、これは Vim の流儀とは言えません。標準のタイピングポジションから矢印キーまで右手を動かしたり、戻したりすることになります。楽しくありません。
Vim においては j
を押すことで下に移動できます。“j” は垂れ下がっていると覚えて下さい。逆に k
を押すことでカーソルを上に移動できます。左は h
で (“j” の左にあります)、右は l
です (小文字の L)。
^
はカーソルを行の最初に、$
は最後に移動します。
次の単語に進むには、w
キーを押します。W
はより多くの文字列を単語として考えます (例えばアンダースコアやダッシュを単語の一部としてみなします)。前の単語に戻るには、b
を使います。同じように、B
は Vim が単語としてみなすものにより多くの文字列を含めます。単語の末尾に移動するには、e
を使い、E
はより多くの文字列を含めて考えます。
文の最初に移動したいときは、(
を使います。)
は反対に、センテンスの最後まで移動します。もっと大きな単位で移動したい場合は、{
で段落の最初まで移動できます。}
はパラグラフ全体の終末まで移動します。
画面の一番上の行に移動するには、H
を使います。M
は画面の真ん中まで移動し、L
は一番下の行に移動します。gg
はファイルの先頭まで飛び、G
はファイルの一番最後まで行きます。Ctrl+D
はページごとにスクロールします。
コマンドの繰り返し
コマンドの前に数字を付けると、その回数分コマンドが繰り返し実行されます (ただし s
コマンドなど例外はあります)。例えば、3i
→ “Help! ” → Esc
と入力すると “Help! Help! Help!“ と書かれます。2}
なら2段落だけ前に進みます。これは次のコマンドで役に立ちます。
削除
x
コマンドはカーソル上の文字を削除します。X
はカーソルの前の文字を消します。先の繰り返しと組み合わせると便利です。6x
は6文字分削除します。.
(ドット) を押すと直前の動作が繰り返されます。例えば、何箇所に "foobar" という単語を書いていたとして、あれやこれやと考えた末、“foo” だけにしたくなったとします。その際は、"b" のところまでカーソルを移動して、3x
と入力して、次の "foobar" に移って .
(ドット) を押せば "bar" を簡単に削除できます。
d
は Vim に何かを削除したいことを伝えます。d
を押した後、Vim に削除したいものを指定してください。移動コマンドを使うことで指定することができます。dW
は次の単語を削除します。d^
は行の先頭まで削除を行います。削除コマンドの前に数字を付けることもできます: 3dW
は次の3つの単語を削除します。D
(大文字) は行末まで削除するショートカットです (つまり d$
)。dd
と入力すると一行まるまる削除されます。
単語を削除して置き換えたいときは、単語の上にカーソルを移動して cw
コマンドを実行してください。単語を削除してから挿入モードに移行します。一文字だけ置換するときは r
を使います。
アンドゥとリドゥ
Vim にはクリップボードが内蔵されています (バッファとも呼ばれます)。操作は u
で元に戻し Ctrl+r
でやり直すことができます。
ビジュアルモード
v
を押すことでビジュアルモードに入ることができます。ビジュアルモードではあちこち移動して文章を選択し、選択したら、y
を押して文章をバッファにヤンク (コピー) したり、c
でカットすることが可能です。カーソルの前には p
でペーストし、P
はカーソルの前にペーストします。V
は行単位で選択するビジュアルラインモードです。Ctrl+v
は矩形選択を行います。
検索と置換
ファイル内の単語または文字を検索するには、/
を使って検索したい文字列を入力してエンターを押します。次の検索結果を見るには n
を、前の結果に戻るには N
を押して下さい。
検索と置換をしたいときは代わりに :s/
コマンドを使います。構文は: [range]s///[arguments]
。例:
Command Outcome :s/xxx/yyy/ Replace xxx with yyy at the first occurrence :s/xxx/yyy/g Replace xxx with yyy at every occurrence in the current line :s/xxx/yyy/gc Replace xxx with yyy global with confirm :%s/xxx/yyy/g Replace xxx with yyy global in the whole file :#,#s/xxx/yyy/g Replace xxx with yyy line number range
グローバル :g/
コマンドを使えばパターン検索をしてマッチした部分でコマンドを実行することができます。構文は: [range]:g//[cmd]
。
Command Outcome :g/^#/d Delete all lines that begins with # :g/^$/d Delete all lines that are empty
保存と終了
保存や終了したいときは、Ex モードを使う必要があります。Ex モードのコマンドには :
を前に付けます。ファイルを保存するには :w
を使い、名前を付けてファイルを保存するには :w filename
を使います。終了は :q
です。変更を保存しないときには :q!
を使って下さい。保存して終了は :x
です。
その他のコマンド
s
を押すとカーソルの文字が消され、挿入モードに変わります。S
は行全体を消去して、挿入モードに移行します。o
は行の下に新しい行を追加して挿入モードに変わります、O
行の上に新しい行を追加して挿入モードに移行します。yy
は行全体をヤンクします。cc
はカーソルがある行を削除して挿入モードに入ります。*
は単語をハイライトして、n
はその単語を検索します。
設定
Vim のユーザー別の設定ファイルはホームディレクトリに配置されます: ~/.vimrc
。ファイルは ~/.vim/
の中に配置されます。グローバルな設定ファイルは /etc/vimrc
にあります。グローバルなファイルは /usr/share/vim/
の中にあります。
Arch Linux における Vim のグローバル設定は必要最小限であり、他の多くのディストリビューションにおけるデフォルトの Vim の設定ファイルとは異なっています。一般に有効にされている機能を使いたいときは (シンタックスハイライトや、最後のカーソルポジションへの復帰など)、Vim のサンプル設定ファイルを使ってみて下さい:
# mv /etc/vimrc /etc/vimrc.bak # cp /usr/share/vim/vim74/vimrc_example.vim /etc/vimrc
折り返し検索
このオプションを使うと、次を検索でファイルの末尾まで達したとき、ファイルの先頭に飛ぶようになります。同じく、前を検索で先頭に達したらファイルの末尾まで移動します。
set wrapscan
シンタックスハイライト
シンタックスハイライトを有効にするには (Vim は膨大な数のプログラミング言語をサポートしています):
:filetype plugin on :syntax on
マウスを使う
Vim にはマウスを利用できるようにする機能がありますが、特定のターミナルでしか機能しません (Linux なら xterm と gpm による Linux コンソール、詳しくはコンソールマウスサポートを参照)。
この機能を有効にするには次の行を ~/.vimrc
に追加してください:
set mouse=a
矢印キーによる行移動
デフォルトでは、行頭で ←
を押したり、行末で →
を押しても、カーソルは前の行や次の行に移動しません。
~/.vimrc
ファイルに set whichwrap=b,s,<,>,[,]
を追加することでこのデフォルトの挙動を変更することができます。
サンプル ~/.vimrc
#設定 2を見て下さい。
ファイルのマージ (vimdiff)
Vim には差分エディタが入っています。2つ (もしくはそれ以上) のファイルの差分をマージするのを助けるプログラムです。vimdiff
は横にマルチペイン表示を行って差分を色でハイライトします、それぞれのペインには確認・編集するファイルが開かれます。Vim には複数のモードが存在しますが、重要なのは文章を編集する挿入モードと、ウィンドウや行をわたってカーソルを移動するコマンドモードの2つです。vimdiff file1 file2
を実行して起動します。以下はいくつかのコマンドの例です。
]c
- 次の差分
[c
- 前の差分
Ctrl+w+w
- ウィンドウの切り替え
i
- 挿入モードに入る
Esc
- 挿入モードを出る
p
- 貼り付け
do
- diff obtain。カーソルが(ハイライトされた)差分の上にあるとき、もうひとつのウィンドウから現在のウィンドウに差分をコピー。
dp
- diff put。diff obtain の逆で、現在のウィンドウからもうひとつのウィンドウへ差分をコピー。
zo
- 折り畳まれた文章を開く
zc
- 折り畳まれた文章を閉じる
:diffupdate
- ファイルの差分を再スキャン
yy
- 行をコピー
dd
- 行を切り取り
:wq
- 現在のウィンドウを保存して終了
:wqa
- 両方のウィンドウを保存して終了
:q!
- 保存せずに終了
ファイルを編集したら、file.pacnew の変更を考慮して:
# mv file file.bck # mv file.pacnew file
新しいファイルが正しいか確認してから、バックアップを削除:
# rm file.bck
Vim のヒント
作業を完遂するための特定のユーザーのトリック。
行番号
:set number
で行番号を表示。:set relativenumber
で相対的な行番号を表示。:<line number>
でその行番号にジャンプ。
ジャンプはジャンプリストに記録されます。詳しくは :h jump-motions
を参照。
スペルチェック
set spell
この設定を使うと、Vim はスペルが間違っている単語をハイライトします。ミススペルの単語にカーソルを載せて z=
を入力すればスペルのサジェストが表示されます。
デフォルトでは英語の辞書しかインストールされていません、他の辞書は公式リポジトリからインストールできます。利用可能な言語のリストを表示するには:
# pacman -Ss vim-spell
言語辞書は Vim FTP archive からも入手できます。ダウンロードした辞書は ~/.vim/spell
フォルダに配置して、次を入力して辞書をセットしてください: :setlocal spell spelllang=LL
行の置換
特定の行だけで置換を行うには:
:n,ns/one/two/g
例えば、3行目と4行目で 'one' を 'two' に置き換えるには、次を実行します:
:3,4s/one/two/g
Vim にファイルのカーソル位置を記憶させる
前回ファイルを開いたときのカーソル位置を復元させたいときは、以下を ~/.vimrc
に追加してください:
if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif endif
Vim Wiki の この tip を参照。
gVim ウィンドウの底部の空きスペース
ウィンドウサイズのヒントを無視するように設定されたウィンドウマネージャを使っている場合、gVim は空の領域を GTK テーマの背景色で塗りつぶします。
解決方法はウィンドウ下部の gVim が確保するスペースを調整することです。ゼロに設定した場合、下の横スクロールバーが見えなくなってしまうことがあるので注意してください。次の行を ~/.vimrc
に記述します:
set guiheadroom=0
"^M"
行末に "^M" が表示されることがあります。これは MS-DOS や Windows で作成したテキストファイルを編集しようとしたときに起こります。
解決方法: 次のコマンドで "^M" を全て置換:
:%s/^M//g
注意、"^" は制御文字なので、Ctrl+Q
を押して正しい "^" を取得してください。
もしくは、公式リポジトリから dos2unix パッケージをインストールして、dos2unix <file name here>
を実行してください。
vi コマンドを vim で置き換える
vi
を vim
にするエイリアスを作成してください。
もしくは、sudo vi
と入力したときに vim
が起動するようにしたい場合、vi-vim-symlinkAUR をインストールしてください。vi
が削除され vim
のシンボリックリンクで置き換えられます。
プラグイン
vim にプラグインを追加することで生産力を向上させることができます。
インストール
プラグインマネージャを使う
プラグインマネージャを使うことで Vim を実行しているプラットフォームから独立して Vim プラグインをインストール・管理することができます。以下が他の Vim プラグインのパッケージマネージャとして使えるプラグインです。
- Neobundle はVundleをベースにして作られた、現在 Vim で最も人気があるプラグインマネージャですが、開発者が今後保守だけになると発表しました。
- dein NeoBundleの開発者が新たに開発しているプラグインマネージャーです、同氏曰くこちらに移行して欲しいとの事。
- Vundle はVim で人気があるプラグインマネージャです。
- Vim-plug はミニマルな Vim プラグインマネージャです。必要に応じてプラグインをロードしたり並列アップデートなどの多数の機能を備えています。
- pathogen.vim は Vim のランタイムパスを管理するシンプルなプラグインです。
Arch のリポジトリを使う
vim-plugins グループには様々なプラグインが入っています。pacman -Sg vim-plugins
コマンドを使うことで pacman でインストールできるパッケージのリストを確認できます。
cscope
Cscope はプロジェクトを閲覧するためのツールです。単語/シンボル/関数まで移動して (ショートカットキーを使って) cscope を呼び出すことで次のことがわかります: 関数を呼び出している関数や、関数の定義など。コードベースを検索するには複数の手順が必要です。
cscope パッケージをインストールしてください。
cscope のデフォルトファイルを vim が自動的に読み取るところへコピーします:
mkdir -p ~/.vim/plugin wget -P ~/.vim/plugin http://cscope.sourceforge.net/cscope_maps.vim
cscope にインデックス化して欲しいファイルを記述したファイルを作成 (Cscope は多数の言語を扱えますがこの例では .c, .cpp, .h ファイルを find しています):
cd /path/to/project/dir find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files
cscope が読み取るデータベースファイルを作成:
cscope -bq
デフォルトのキーボードショートカット:
Ctrl-\ and c: Find functions calling this function d: Find functions called by this function e: Find this egrep pattern f: Find this file g: Find this definition i: Find files #including this file s: Find this C symbol t: Find assignments to
ショートカットは自由に変更することができます。
#Maps ctrl-c to find functions calling the function nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>
Taglist
Taglist はソースコードファイルの構造の概観を提供し、様々なプログラミング言語で書かれたソースコードファイルを効率的に閲覧できるようにします。
vim-taglist パッケージをインストールしてください。
~/.vimrc
に記述する有用なオプション:
let Tlist_Compact_Format = 1 let Tlist_GainFocus_On_ToggleOpen = 1 let Tlist_Close_On_Select = 1 nnoremap <C-l> :TlistToggle<CR>
参照
公式
チュートリアル
- vim Tutorial and Primer
- vi Tutorial and Reference Guide
- Graphical vi-Vim Cheat Sheet and Tutorial
- Vim Introduction and Tutorial
- Open Vim - Vim 学習ツールのコレクション。
- Learn Vim Progressively
- Learning Vim in 2014
- Seven habits of effective text editing
- Basic Vim Tips
- HOWTO Vim
動画
- Vimcasts - .ogg 形式のスクリーンキャスト。
- Vim Tutorial Videos - 基本事項から高度な話題までカバー。
ゲーム
設定
- nion's
- A detailed configuration from Amir Salihefendic
- Bart Trojanowski
- Steve Francia's Vim Distribution
- W4RH4WK's Vim configuration
- Fast vimrc/colorscheme from askapache
- Basic vimrc
- Usevim
カラー
- Vivify — Vim のカラースキームエディタ。
- Vim colorscheme customization