はじめに
私自身vimを使い始めたのは最近のことですので、詳しい方からしたら今更感のあるものとなってしまうと思います。
また、見様見真似で覚えたことが多いので、粗もあるかと思います。ここはこうした方がよいなどございましたら更新していくつもりですので、コメントいただけると幸いです。
vimとは
テキストエディタの一つで、ターミナル上で動作する。
vimを使い始めたきっかけ
Ubuntuを使い始めたこと
vimの利点[主観]
・ターミナル上で動作するため、ssh接続でテキスト編集ができる。
・キーボードのみで操作可能なので、ターミナル操作からの流れでキーボードから手を話すことなく作業が可能。
・コピー&ペーストが素早く、自分のソースコードを再利用したりオープンソースを活用しやすい。
・.vimrc
というファイルによって簡単に設定ができる。
vimの欠点[主観]
・メモ帳のイメージで使用するととてつもなく不便。
・コマンドを覚えるまでのハードルが(少し)高い。
・vim以外のテキストエディタを使えなくなる。(笑)
vim入門
1.基本操作
・基本的な移動は←↓↑→の順にh
,j
,k
,l
・i
を押すとインサートモード。ここではメモ帳のようにテキスト編集可能。移動は十字キー
・Esc
を押すとノーマルモードに戻る
・:w
で保存
・:q
でvimを閉じる
・:wq
で保存して終了
2.カット&ヤンク&ペースト
1行
コマンド | 動作 |
---|---|
dd | カット |
yy | ヤンク |
p | ペースト |
n行 (コマンドのnには任意の数字を入れてください)
コマンド | 動作 |
---|---|
ndd | カット |
nyy | ヤンク |
p | ペースト |
ビジュアルモード
視覚的に見ながら複数選択ができるモード
wordでいうところの、Shift
キーを押したまま矢印キーを押すもの。
マウスで左を押したままカーソルを移動するもの。
・v
でビジュアルモードに移行
・ノーマルモードと同じ移動ができる
・選択中にy
でヤンク、d
でカット、自動でノーマルモードに戻るのでそのままp
でペーストできる
・Esc
でノーマルモードに戻ることができる
このとき、よく使うのがggvGy
で、これは一番上から一番下までヤンク
という意味です。:%y
もほぼ同じですが、こちらの方が打ちやすく個人的には好きです。このとき、最後の行の1文字目までしか選択してくれないことには注意してください。
3.他のファイルからヤンク&ペースト
ここまで、コピーやペーストのやり方を記してきましたが、別でvimを起動すると貼り付けることができません。
そこで、vim上で他のファイルを開く必要があります。
vimを分割
そのまま別ファイルを開いても構いませんが、vimを分割した方が使いやすいです。
コマンド | 動作 |
---|---|
:split | 縦に一つタブを作成して同一ファイルを開く |
:vsplit | 横に一つタブを作成して同一ファイルを開く |
:new | 縦に分割して新規ファイルを開く |
:vnew | 横に分割して新規ファイルを開く |
分割したタブへ移動したい時はCtrl+w w
、Ctrl+w h
、Ctrl+w j
、Ctrl+w k
、Ctrl+w l
で移動できます。
分割したタブを閉じたい時は:q
で閉じることができます。変更を加えていた場合は:wq
となります。
別ファイルを開く
・:open filename
で指定したファイルを開く
・:open path/to/filename
で別ディレクトリのファイルを開ける
このとき、開きたいファイル名やパスがわからない時は:open .
のようにするとフォルダの中身の一覧が見られるし、ディレクトリ移動もできます。
4..vimrc
について
.vimrc
とはvimを設定するファイルのことです。基本的にはホームディレクトリに置きます。ドットがついているので$ ls
をした時には表示されないので邪魔にはならないので心配しないでください。もしあるか不安なら$ ls -a
で存在を確認できます。
.vimrc
の例
私が現在使用しているものです。他の方のものを見て好きなものを抜き出しているので、パクリがあるかもしれません。何かあれば消させていただきますので、ご指摘ください。
" タブ入力を複数の空白入力に置き換える
set expandtab
" 画面上でタブ文字が占める幅
set tabstop=2
" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set softtabstop=2
" 改行時に前の行のインデントを継続する
" set autoindent
" 改行時に前の行の構文をチェックし次の行のインデントを増減する
" set smartindent
" smartindentで増減する幅
" set shiftwidth = 2
" 行を表示
set number
if has("autocmd")
" ファイルタイプの検索を有効にする
filetype plugin on
" ファイルタイプに合わせたインデントを利用
filetype indent on
" sw=softtabstop, sts=shiftwidth, ts=tabstop, et=expandtab
autocmd FileType c setlocal sw=4 sts=4 ts=4 et
autocmd FileType html setlocal sw=4 sts=4 ts=4 et
autocmd FileType ruby setlocal sw=2 sts=2 ts=2 et
autocmd FileType js setlocal sw=4 sts=4 ts=4 et
autocmd FileType zsh setlocal sw=4 sts=4 ts=4 et
autocmd FileType python setlocal sw=4 sts=4 ts=4 et
autocmd FileType scala setlocal sw=4 sts=4 ts=4 et
autocmd FileType json setlocal sw=4 sts=4 ts=4 et
autocmd FileType html setlocal sw=4 sts=4 ts=4 et
autocmd FileType css setlocal sw=4 sts=4 ts=4 et
autocmd FileType scss setlocal sw=4 sts=4 ts=4 et
autocmd FileType sass setlocal sw=4 sts=4 ts=4 et
autocmd FileType javascript setlocal sw=4 sts=4 ts=4 et
endif
" インクリメンタルサーチ(1文字入力ごとに検索する)
set incsearch
" 検索パターンに大文字小文字を区別しない
set ignorecase
" 検索パターンに大文字を含んでいたら大文字小文字を区別する
set smartcase
" 検索結果をハイライト
set hlsearch
" Escキー2度押しでハイライトの切り替え
nnoremap <silent><Esc><Esc> :<C-u>set nohlsearch!<CR>
" 行が折り返し表示されていた場合、行単位ではなく表示行単位でカーソル移動
nnoremap j gj
nnoremap k gk
nnoremap <down> gj
nnoremap <up> gk
" コマンドモードの補完
set wildmenu
" 保存するコマンド履歴の数
set history=5000
" マウスの有効化(カーソル移動・スクロール移動)
if has('mouse')
set mouse=a
if has('mouse_sgr')
set ttymouse=sgr
elseif v:version > 703 || v:version is 703 && has('patch632')
set ttymouse=sgr
else
set ttymouse=xterm2
endif
endif
" ペースト設定(クリップボードからコピーする際の自動インデント無効化)
if &term =~ "xterm"
let &t_SI .= "\e[?2004h"
let &t_EI .= "\e[?2004l"
let &pastetoggle = "\e[201~"
function XTermPasteBegin(ret)
set paste
return a:ret
endfunction
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin{""}
endif
" 自己流ショートカット
" コメントアウト
nnoremap <C-i> 0i//<Esc>
" アンコメントアウト
nnoremap <C-s> 0xx
" 空白行を追加するがノーマルモードを維持
nnoremap <S-o> o<Esc>
" カーソルの左右移動で行末から次の行への移動を可能にする
set whichwrap=b,s,h,l,<,>,[,],~
" カーソルラインをハイライト
color desert
set cursorline
" カレント行ハイライトを下線の代わりに文字強調にする
hi CursorLine term=bold cterm=bold guibg=Grey40
~/
以外に置きたい場合は、任意の場所に.vimrc
を置いて、開き方を$ vim -u path/to/.vimrc filename
とするとできます。
5.ここまでくればもうvimの良さに気がつくと思います!
おまけ
その他のコマンド
先程は、触れやすくするために似たような動作をするコマンドを省略しましたので、それらを少しだけ紹介しておきます。
コピー系
コマンド | 動作 |
---|---|
:set number | 行番号を表示 |
:n,m y | n行からm行までヤンク |
:n,m d | n行からm行までカット |
np | n個ペースト |
移動系
コマンド | 動作 |
---|---|
Ctrl+d | 半ページダウン |
Ctrl+u | 半ページアップ |
Ctrl+f | 1ページダウン |
Ctrl+b | 2ページアップ |
zz | カーソル行を中心 |
zt | カーソル行を一番上 |
検索&置換系
コマンド | 動作 |
---|---|
/name | nameという文字列を検索 |
:s/before/after | カレント行の先頭のbeforeをafterに置換 |
:s/before/after/g | カレント行のすべてのbeforeをafterに置換 |
n | 検索結果を次へ |
Shift+n | 検索結果を前へ |
矩形選択モード
一斉に字下げする際に重宝します。
・Ctrl+v
で矩形選択モードに移行
・$
で長さの違う行をすべて選択
・y
でヤンク、d
でカット
・Esc
でノーマルモードに戻る