vim
自動保存させない
:let g:auto_save = 1
Command line
.vimrc 読み込まずに test.md を開く
$ vim -u NONE -N test.md
- .vimrc を読み込まないと vi 互換モードに退行するので、-N フラグを指定する
vim でファイルを開かずにプラグインをインストールする
$ vim -E -s -u "path_to_vim_rc/.vimrc" +PlugInstall +qall
Basic
item | contents |
---|---|
Ctr+m | 改行(enter) |
Ctr+i | タブ(TAB) |
ノーマルモード
item | content |
---|---|
a | 次のカーソルから入力モード |
A | 行末から入力モード |
dd | カーソルがある行の削除 |
D | 現在のカーソルがある場所から行末までを削除 |
数字dd | カーソルがある行から数字指定した行のまで削除 |
gg | カーソルをファイルの先頭へ移動 |
GG | カーソルをファイルの末尾へ移動 |
i | 現在のカーソルから入力モード |
I | 行頭から入力モード |
o | 次の行に空行を作り、入力モード |
O | 前の行に空行を作り、入力モード |
p | 次の行へペースト |
P | 前の行へペースト |
x | カーソルがある場所の文字削除 |
X | カーソルがある場所の前の文字削除 |
数字x | カーソルがある場所から数字までの文字削除 |
数字X | カーソルがある場所の前の数字の文字削除 |
yy | 行コピー |
数字yy | 数字行コピー |
数字↑ | 指定した数の分だけカーソルを上へ移動 |
数字↓ | 指定した数の分だけカーソルを下へ移動 |
数字← | 指定した数の分だけカーソルを左へ移動 |
数字→ | 指定した数の分だけカーソルを右へ移動 |
% | カーソル位置にある括弧と対になる括弧に移動 |
{ | カーソル位置の段落の先頭に移動 |
} | カーソル位置の段落の末尾に移動 |
[[ | カーソル位置の前の段落に移動 |
]] | カーソル位置の後の段落に移動 |
その他
item | content |
---|---|
:new | 新規ウィンドウ Ctr + w hjkl : ウィンドウの移動 |
:set number | 行番号の表示 |
:tabnew | 新規タブの作成 :gt タブの移動 |
:ls | バッファの確認 |
:b 番号 | バッファへ移動 |
コピーしたものをそのまま貼り付け ※ インデント無視したいときとか
:set paste
文字コードの指定してファイルを編集する
ファイルオープン前
vim -c ":e ++enc=cp932" test.txt
ファイルオープン後
:e ++enc=shift_jis :e ++enc=iso-2022-jp :e ++enc=euc_jp
新規ファイル作成
:e filename
検索ハイライトを消す
:noh
move line number
:[line number]
行末挿入
- 矩形で、選択
- $ 指定で行末まで
- A で行末入力
直前の単語削除
- ctr + w
インデント追加
- ctr + t
インデント削除
- ctr + d
対応括弧移動
- %
一致した行を消す
:%g/^.*hoge.*$/d
一致しない行を消す
:%v/^.*hoge.*$/d
空白行を削除
:g/^$/d
awk を利用して選択行の 1 番目を取得
ヴィジュアルモード選択
コロン押下で、! つけてあげて
:'<,'>!awk '{print $1}'
プロファイリング
vim が遅いとかに重宝
ログの指定
:profile start profile.log
プロファイリング対象を決める
:profile func * :profile file *
測定したい動作を実施
測定を終了
:profile pause :noautocmd qall!
名前をつけて保存
:w filename
レジスタの値をペースト
値確認
:reg --- Registers --- "" hogehoge "0 hogehoge1 "1 hogehoge2 ``
1 を貼り付けしたい。貼り付けたい場所にカーソルをあわせる
"1p
外部コマンド実行 ※ ls 実行
:!ls
カーソル位置にファイルを読み込む
:r ファイル名
カーソル位置に ls コマンドの実行結果を貼り付ける
:r! ls
ビジュアルモードで選択した部分の置換
- Crt + v で対象を選択(vでもOK)
- 「:」押下
- :’<,’> <-- 出てくる
- 置換 :’<,’>:s/before/after/g
ビジュアルモードで文末に文字を挿入する
- Ctr + v で対象を選択
- 「$」で行末まで選択
- 対象の行まで移動
- Crt + a を押下
- 文字入れる
- ESC
単語数(the)を調べる
- 「:」押下
- :%s/the/&/gn
数字のインクリメント
Ctr + a
数字のデクリメント
Ctr + x
Tips
vim-markdonw の
Foldexpr_markdown
のせいで vim のタイプが異常に遅かったので無効化let g:vim_markdown_folding_disabled = 1
クリップボードに vim からコピーできるように変更 for mac
現在の設定を確認
$ vim --version | grep clipboard -clipboard +job +path_extra -toolbar +ex_extra -mouse_gpm -sun_workshop -xterm_clipboard
- +clipboard ではないのでクリップボードが使用できない
vim インストール
$ brew update $ brew install vim
インストール確認
$ brew list vim /usr/local/Cellar/vim/8.0.1800/bin/ex /usr/local/Cellar/vim/8.0.1800/bin/rview /usr/local/Cellar/vim/8.0.1800/bin/rvim /usr/local/Cellar/vim/8.0.1800/bin/view /usr/local/Cellar/vim/8.0.1800/bin/vim /usr/local/Cellar/vim/8.0.1800/bin/vimdiff /usr/local/Cellar/vim/8.0.1800/bin/vimtutor /usr/local/Cellar/vim/8.0.1800/bin/xxd /usr/local/Cellar/vim/8.0.1800/share/man/ (9 files) /usr/local/Cellar/vim/8.0.1800/share/vim/ (1410 files)
クリップボードが使用できるか確認
$ /usr/local/Cellar/vim/8.0.1800/bin/vim --version | grep clipboard +clipboard +jumplist +persistent_undo +virtualedit -ebcdic -mouseshape +statusline -xterm_clipboard
- +clipboard なので使用可能
入れ替え
既存を mv
$ mv /usr/local/bin/vim /usr/local/bin/old_vim
シンボリックリンクはる
$ ln -s /usr/local/Cellar/vim/8.0.1800/bin/vim /usr/local/bin/vim
バージョン確認
$ vim --version | grep clipboard +clipboard +jumplist +persistent_undo +virtualedit -ebcdic -mouseshape +statusline -xterm_clipboard
"hoge"
の hoge を選択- vi"
画面分割
Ctr + w
が prefix
item | content |
---|---|
:sp | 上下分割 :sp filename で新規にファイルを開く 移動は Ctr+w => w :close で閉じる |
:vsp | 水平分割 |
prefix + r | 画面入れ替え |
prefix + > | ウィンドウの幅を増やす |
prefix + < | ウィンドウの幅を減らす |
prefix + + | ウィンドウの高さを増やす |
prefix + - | ウィンドウの高さを減らす |
タブ
item | contents |
---|---|
:tabnew | 新規タブ |
gT | move pre tab |
gt | move next tab |
2gt | move number 2 tab |
Tips
- vim を終了することなく編集中ファイルのファイル名を変更する
通常
$ mv aaa.txt bbb.txt $ vim bbb.txt
vim 上で
:call rename(expand('%'), 'bbb.txt') :e bbb.txt
- expand('%') で編集中ファイルのファイル名を得て、rename() で新しいファイル名に変更
事前に古いファイルに編集中のデータを保存しておかなければ、新しいファイルに編集分が反映されないという問題点
リモートファイルの編集
$ vim scp://root@test01//srv/main.go
- root
- 接続ユーザ名
- test01
- ホスト名
- 注意
vim-go
を利用している場合には:let g:go_fmt_autosave = 0
を実行して設定を無効にしないと保存時にファイルが空になる
- root
References
プラグイン
- マネージャー
- show file tree