Vimのインストールとチュートリアル

Ubuntu Desktop環境構築 Part 21

公開日: 2021-04-27
更新日: 2023-10-06

  Table of Contents

What I want to do?

  • Vim Hugeのインストール
  • Vimの使い方を覚える

Vimのインストール

デフォルトのvim

Ubuntu 20.04 LTSのデフォルトでは、vimはインストールされていますが「vim-tiny」という簡易版です。vimコマンド自体は存在せずviコマンドで立ち上げる必要があります. このときの、バージョンを

1
% vi --version

で確認すると、「Small version without GUI」となっています.

Vimの種類はたくさんあり, ディストリビューションごとに最適化されたもの(例: vim-gtk)や, そもそも Vim 自体の機能が制限されたもの(例: vim-tiny)などが存在します.

1
% apt search vim-

で様々な種類のvimのパッケージが存在することが確認できます.

Column: Vimの種類

環境に依存しない Vim 自体の種類(タイプ)として基本的に以下の5つに大別できます:

tiny vim-tiny とは、最小構成でビルドされた Vim です。シンタックスハイライト(:syntax on)が有効にならなかったり、複数バッファ(:n など)、テキストオブジェクト(ciw)などが使用できない
small 一部の機能を無効にしてコンパイル
normal 標準の機能を有効にしてコンパイル
big 多くの機能を有効にしてコンパイル
huge ほとんどの機能を有効にしてコンパイル

Vimのインストール

今回はとりあえず、huge な Vim をインストールします.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
% sudo apt install vim
% vim --version
VIM - Vi IMproved 8.1 (2018 May 18, compiled Apr 15 2020 06:40:31)
Included patches: 1-2269
Modified by team+vim@tracker.debian.org
Compiled by team+vim@tracker.debian.org
Huge version without GUI.  Features included (+) or not (-):
+acl               -farsi             -mouse_sysmouse    -tag_any_white
+arabic            +file_in_path      +mouse_urxvt       -tcl
+autocmd           +find_in_path      +mouse_xterm       +termguicolors
+autochdir         +float             +multi_byte        +terminal
-autoservername    +folding           +multi_lang        +terminfo
-balloon_eval      -footer            -mzscheme          +termresponse
+balloon_eval_term +fork()            +netbeans_intg     +textobjects
-browse            +gettext           +num64             +textprop
++builtin_terms    -hangul_input      +packages          +timers
+byte_offset       +iconv             +path_extra        +title
+channel           +insert_expand     -perl              -toolbar
+cindent           +job               +persistent_undo   +user_commands
-clientserver      +jumplist          +postscript        +vartabs
-clipboard         +keymap            +printer           +vertsplit
+cmdline_compl     +lambda            +profile           +virtualedit
+cmdline_hist      +langmap           -python            +visual
+cmdline_info      +libcall           +python3           +visualextra
+comments          +linebreak         +quickfix          +viminfo
+conceal           +lispindent        +reltime           +vreplace
+cryptv            +listcmds          +rightleft         +wildignore
+cscope            +localmap          -ruby              +wildmenu
+cursorbind        -lua               +scrollbind        +windows
+cursorshape       +menu              +signs             +writebackup
+dialog_con        +mksession         +smartindent       -X11
+diff              +modify_fname      +sound             -xfontset
+digraphs          +mouse             +spell             -xim
-dnd               -mouseshape        +startuptime       -xpm
-ebcdic            +mouse_dec         +statusline        -xsmp
+emacs_tags        +mouse_gpm         -sun_workshop      -xterm_clipboard
+eval              -mouse_jsbterm     +syntax            -xterm_save
+ex_extra          +mouse_netterm     +tag_binary        
+extra_search      +mouse_sgr         -tag_old_static    
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H   -Wdate-time  -g -O2 -fdebug-prefix-map=/build/vim-iU6mZD/vim-8.1.2269=. -fstack-protector-strong -Wformat -Werror=format-security -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
Linking: gcc   -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -o vim        -lm -ltinfo -lnsl  -lselinux  -lcanberra -lacl -lattr -lgpm -ldl     -L/usr/lib/python3.8/config-3.8-x86_64-linux-gnu -lpython3.8 -lcrypt -lpthread -ldl -lutil -lm -lm  

Huge version」となっており, いろいろな機能が含まれた状態のVimがインストールされていることが分かります. また, この時点ですでに viと実行しても、新しくインストールしたvimが起動する様になっています.

Vimの初期設定

Vimの設定を行うには、ターミナル上で .vimrc というファイルをホームディレクトリ上に作成する必要があります。

1
2
% cd #ホームディレクトリに移動
% code ~/.vimrc #vimrcを作成し、中身をvimで表示する

設定は以下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Maintainer: 
"       Ryo Nakagami
"
" Reference
"       https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim
"
" updatetimestamp
"       2021-06-15 00:34:23
"
" Sections:
"    -> General
"    -> VIM user interface
"    -> Colors and Fonts
"    -> Files and backups
"    -> Text, tab and indent related
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => General
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Sets how many lines of history VIM has to remember
set history=500

" Enable filetype plugins
filetype plugin on
filetype indent on

" Set to auto read when a file is changed from the outside
set autoread
au FocusGained,BufEnter * checktime


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => VIM user interface
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Ignore case when searching
set ignorecase

" When searching try to be smart about cases 
set smartcase

" Highlight search results
set hlsearch

" show the row number
set number

" highlight the space at the end
set listchars=tab:^\ ,trail:~

" set no beep
set noerrorbells

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Colors and Fonts
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Enable syntax highlighting
syntax enable 

" highlight the comment with light-blue colour
hi Comment ctermfg=3


set background=dark

set encoding=utf-8

set fileformats=unix,dos,mac


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Files, backups and undo
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Turn backup off, since most stuff is in SVN, git etc. anyway...
set nobackup
set nowb
set noswapfile


"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Text, tab and indent related
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Use spaces instead of tabs
set expandtab

" 1 tab == 4 spaces
set shiftwidth=4
set tabstop=4

" Linebreak on 500 characters
set lbr
set tw=500

set ai "Auto indent
set si "Smart indent
set wrap "Wrap lines

set fileencodings=utf-8,cp932,sjis
scriptencoding utf-8

" set no bom
set nobomb

標準エディタをVimに設定する

標準エディタを切り替える場合は以下のコマンドを入力します:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
% sudo update-alternatives --config editor
[sudo] password for ryo_billiken: 
There are 5 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path               Priority   Status
------------------------------------------------------------
* 0            /bin/nano           40        auto mode
  1            /bin/ed            -100       manual mode
  2            /bin/nano           40        manual mode
  3            /usr/bin/code       0         manual mode
  4            /usr/bin/nvim       30        manual mode
  5            /usr/bin/vim.tiny   15        manual mode

Press <enter> to keep the current choice[*], or type selection number: 4
update-alternatives: using /usr/bin/nvim to provide /usr/bin/editor (editor) in manual mode

Vimの基本

Vimでは, 行う作業に応じて

  • コマンドモード: 入力コマンド待機状態
  • インサートモード: テキスト入力を行うモード
  • exモード: ファイルの保存やVimの終了といった処理を行う

の3つがあります.

sequenceDiagram
    participant A as terminal
    participant B as command mode
    participant C as insert mode
    participant D as ex mode
    participant E as visual mode
    
    A-->>B: 起動 (= vim 入力)
    B-->>C: i key 入力
    C-->>B: esc key入力
    B-->>D: : key 入力
    B-->>D: : key 入力
    B-->>E: v key 入力
    E-->>B: esc key 入力
    D-->>A: q key 入力

コマンドモードでの操作の基本

コマンドモードでは, 画面のスクロールやカーソル移動を行います.

画面のスクロール

基本的には, pageup, pagedownコマンドで十分ですが, キー入力で操作したい場合は以下,

vi command 説明
ctrl + b pageup
ctrl + f pagedown

カーソルの移動

vi commandでのカーソルに移動は以下、

1
2
3
4
5
             ^
             k              Hint:  The h key is at the left and moves left.
       < h       l >               The l key is at the right and moves right.
             j                     The j key looks like a down arrow.
             v

ただし, 基本的には矢印キーでもカーソル移動できるので覚えなくても大丈夫です. どうしても覚えたいときは, 全角の矢印の方向と同じなのでそれで覚えれば大丈夫です.

vi command 説明
h or カーソルを左に1文字移動
j or カーソルを下に1文字移動
k or カーソルを上に1文字移動
l or カーソルを右に1文字移動
0 現在の行の先頭へ移動
^ 現在の行の空白を除く先頭へ移動
$ 現在の行の末尾へ移動
1G 先頭へ移動
G 最終行へ移動
nG n行へ移動
H 先頭へ移動
gg 先頭へ移動

UNDO操作

vi command 説明
u 最後に実行されたコマンドのUNDO
U 行をoriginalの状態(カーソルが合わせられる直前)まで戻す
Ctrl + r UNDOのUNDO

ex modeでの操作

ファイルの保存や終了はex mode経由で実施します. 代表的なコマンドは以下です.

vi command 説明
:w ファイル名を変更せずに保存
:w! ファイル名を変更せずに強制保存
:w <filename> ファイル名を変更して保存
:q ファイルを保存せずに終了
:q! ファイルを保存せずに強制終了
:wq ファイルを保存して終了
:wq! 強制的にファイルを保存&終了
:wq <filename> ファイル名を変更して保存&終了

Column: .swpファイル

  • .swpファイルはスワップファイルと呼ばれるもの
  • アプリケーションのクラッシュに備えて, vimエディタでの編集開始時に作成され, 編集後に削除される編集情報の記録ファイル
  • vimエディタがシステムエラーで強制終了しても, .swpファイルを用いてVimは保存前のデータを復元しようとしてくる

Vimを開きながらシェルコマンドを実行

Vimを開きながらシェルコマンドを実行するためにはex モードで以下のコマンドを入力します

1
:! shell-command

Vimの実行中にファイル保存しようと思ったときに, 書き込み権限がないことが判明し, Permissionを調べたいときなどに役に立ちます.

編集ファイル上にシェルスクリプトの結果を出力

編集ファイル上にシェルスクリプトの結果を出力する場合は以下の手順で実行します

  1. 入力したい行にカーソルを合わせる
  2. vコマンドなどを用いてVisual Modeに移行する
  3. :! shell-commandを入力してEnter
1
2
3
4
5
#!/bin/bash
 
echo "Hello World!"
 
echo "Good Bye"

から, 4行目にカーソルを合わせてVisual Mode経由でdateコマンドを実行すると, 以下のように標準出力結果をinsertすることができます

1
2
3
4
5
#!/bin/bash
 
echo "Hello World!"
Tue Apr 27 04:46:09 PM JST 2021
echo "Good Bye"

insert modeでの操作

コマンドモードからinsert modeへの移行コマンドはいくつかあります

vi command 挙動
i カーソルの前に文字挿入
a カーソルの後に文字挿入
I カーソル行の先頭から文字挿入
A カーソル行の末尾から文字挿入
o カーソルの下に新しい行を作成し, 先頭から文字挿入
O カーソルの上に新しい行を作成し, 先頭から文字挿入

文字の削除

Vimにおける削除は基本的には「切り取り(=カット)」です. 削除の実行の仕方は, 「コマンドを用いる方法」と「コマンドを用いない方法」の2つがあります.

コマンドを用いない削除方法

コマンドモードに応じて使用できるコマンドが異なります

key mode 削除対象
del insert mode
コマンドmode
カーソルのある文字を削除(感覚的には後ろ)
backspace insert mode カーソルの左文字を削除

コマンドを用いる削除方法

コマンドモードにて, Vimでは文字, 単語, 行の削除を実行するコマンドが用意されています.

文字単位の削除

vi command 挙動
x カーソルのある文字を削除
X カーソルの左にある文字を削除
<数値>x カーソル右にn文字を削除
<数値>X カーソル左にn文字を削除

行指向の削除

vi command 挙動
J カーソルのある行の改行を削除
dd カーソル行を削除
<数値>dd カーソル行からn行削除
D カーソル位置から行末まで削除
d$ カーソル行を削除(行自体は残す)
dG カーソル行から最終行まで削除
dH 先頭からカーソル行まで削除
:%d exモードにて全削除

単語指向の削除

vi command 挙動
dw カーソルから1単語削除
de カーソルから1単語削除(スペースは残す)
d<数値>w カーソルからn単語削除
d<数値>e カーソルからn単語削除(スペースは残す)

コピーと貼り付け

vi command 挙動
yy カーソル行をコピー
yw カーソルから1単語コピー
p カーソル位置から後ろに貼り付け
P カーソル位置から前に貼り付け

検索と置換

検索と置換はどちらもex modeで実行します.

文字列の検索

Vimで文字列を検索する場合, 先頭から検索するのか, 末尾から検索するのか, に応じてコマンドが異なります

vi command 説明
/searchword カーソルのある位置から末尾に向かって検索
?searchword カーソルのある位置から先頭に向かって検索

検索コマンドは1値度実行すると最初にヒットしたキーワードで止まります. 続けて検索したい場合は,

  • nを入力: 同じ方向に向かって検索
  • Nを入力: 逆の方向に向かって検索

文字列の置換

置換は, sedコマンドと似たsyntaxで行います. unkoという文字列をkirbyという文字列に置換したい場合, 置換範囲を指定して以下のように実行します

1
2
3
4
5
6
7
8
## ファイル全体を対象に先頭から見つけた1つ目を置換
:%s/unko/kirby/

## ファイル全体を対象に一括置換
:%s/unko/kirby/g

## ファイルの1行目から5行目を対象に一括置換
:1,5s/unko/kirby/g

References



Share Buttons
Share on:

Feature Tags
Leave a Comment
(注意:GitHub Accountが必要となります)