LoginSignup
9
6

More than 3 years have passed since last update.

vim超入門まとめ[.vimrcの例]

Last updated at Posted at 2018-10-29

はじめに

私自身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文字目までしか選択してくれないことには注意してください。
→コメントで教えていただいたのですが、ggVGyですべてヤンクできます。

3.他のファイルからヤンク&ペースト

ここまで、コピーやペーストのやり方を記してきましたが、別でvimを起動すると貼り付けることができません。
そこで、vim上で他のファイルを開く必要があります。

vimを分割

そのまま別ファイルを開いても構いませんが、vimを分割した方が使いやすいです。

コマンド 動作
:split 縦に一つタブを作成して同一ファイルを開く
:vsplit 横に一つタブを作成して同一ファイルを開く
:new 縦に分割して新規ファイルを開く
:vnew 横に分割して新規ファイルを開く

分割したタブへ移動したい時はCtrl+w wCtrl+w hCtrl+w jCtrl+w kCtrl+w lで移動できます。
分割したタブを閉じたい時は:qで閉じることができます。変更を加えていた場合は:wqとなります。

別ファイルを開く

  • :vnew filenameで指定したファイルを開く
  • :new filenameでファイルを開く
  • :open filenameでファイルを開く
  • :open path/to/filenameで別ディレクトリのファイルを開ける

このとき、開きたいファイル名やパスがわからない時は:open .のようにするとフォルダの中身の一覧が見られるし、ディレクトリ移動もできます。

4..vimrcについて

.vimrcとはvimを設定するファイルのことです。基本的にはホームディレクトリに置きます。ドットがついているので$ lsをした時には表示されないので邪魔にはならないので心配しないでください。もしあるか不安なら$ ls -aで存在を確認できます。

.vimrcの例

私が現在使用しているものです。他の方のものを見て好きなものを抜き出しているので、パクリがあるかもしれません。何かあれば消させていただきますので、ご指摘ください。

set encoding=utf-8
scriptencoding utf-8

syntax on
" タブ入力を複数の空白入力に置き換える
set expandtab
" 画面上でタブ文字が占める幅
set tabstop=2
" 連続した空白に対してタブキーやバックスペースキーでカーソルが動く幅
set softtabstop=2
" 改行時に前の行のインデントを継続する
set autoindent
" 改行時に前の行の構文をチェックし次の行のインデントを増減する
set smartindent
" smartindentで増減する幅
set shiftwidth=2
" 行を表示
set number
" 自動コメントアウト無効
augroup auto_comment_off
  autocmd!
  autocmd BufEnter * setlocal formatoptions-=r
  autocmd BufEnter * setlocal formatoptions-=o
" 終了時に余計な空白を削除する
autocmd BufWritePre * :%s/\s\+$//ge

if has("autocmd")
  " ファイルタイプの検索を有効にする
  filetype plugin on
  " ファイルタイプに合わせたインデントを利用
  filetype indent on
  " sw=softtabstop, sts=shiftwidth, ts=tabstop, et=expandtab
  autocmd FileType c           setlocal sw=2 sts=2 ts=2 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

" 自己流ショートカット
" Pythonについて
" Ctrl+iで1行コメントアウト
autocmd BufNewFile,BufRead *.py nnoremap <C-i> <Home>i#<Esc>
" Ctrl+sで1行アンコメントアウト
autocmd BufNewFile,BufRead *.py nnoremap <C-s> <Home>x<Esc>
" Ctrl+eでスクリプト実行
autocmd BufNewFile,BufRead *.py nnoremap <C-e> :terminal python %
" C++について
" Ctrl+iで1行コメントアウト
autocmd BufNewFile,BufRead *.cpp nnoremap <C-i> <Home>i//<Esc>
" Ctrl+sで1行アンコメントアウト
autocmd BufNewFile,BufRead *.cpp nnoremap <C-s> <Home>xx<Esc>
" Ctrl+bでmakeコマンド実行
autocmd BufNewFile,BufRead *.cpp nnoremap <C-b> :make
" Ctrl+bでmake runコマンド実行
autocmd BufNewFile,BufRead *.cpp nnoremap <C-e> :make run
" 空白行を追加するがノーマルモードを維持,上に空行挿入が使えなくなることに注意
nnoremap <S-o> o<Esc>


" カーソルの左右移動で行末から次の行への移動を可能にする
set whichwrap=b,s,h,l,<,>,[,],~
" カーソルラインをハイライト
color desert
set cursorline
" カレント行ハイライトを下線の代わりに文字強調にする
hi CursorLine term=bold cterm=bold guibg=Grey40

nnoremap x "_x
vnoremap x "_x
nnoremap X "_X
vnoremap X "_X
nnoremap s "_s
vnoremap s "_s

" BackSpaceを有効化
set backspace=indent,eol,start
" ヤンクとクリップボードを共有
set clipboard=unnamed,autoselect

~/以外に置きたい場合は、任意の場所に.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 1ページアップ
zz カーソル行を中心
zt カーソル行を一番上

検索&置換系

コマンド 動作
/name nameという文字列を検索
:s/before/after カレント行の先頭のbeforeをafterに置換
:s/before/after/g カレント行のすべてのbeforeをafterに置換
n 検索結果を次へ
Shift+n 検索結果を前へ

矩形選択モード

一斉に字下げする際に重宝します。
Ctrl+vで矩形選択モードに移行
$で長さの違う行をすべて選択
yでヤンク、dでカット
Escでノーマルモードに戻る

9
6
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6