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検索ハイライトを消す
:nohmove line number
:[line number]行末挿入
- 矩形で、選択
- $ 指定で行末まで
- A で行末入力
直前の単語削除
- ctr + w
インデント追加
- ctr + t
インデント削除
- ctr + d
対応括弧移動
- %
一致した行を消す
:%g/^.*hoge.*$/d一致しない行を消す
:%v/^.*hoge.*$/d空白行を削除
:g/^$/dawk を利用して選択行の 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.txtvim 上で
: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