【VI】VIM ~ コマンドモード ~

■ はじめに

VIM の コマンドモード の よく使う Tips をまとめておく。

目次

【1】コマンドモード
【2】実用例
 例1:Pythonを実行する
 例2:ファイル内をソートする
 例3:差分をとる
 例4:重複削除
 例5:囲み文字を入れる

【1】コマンドモード

* vi には、以下の2つのモードがある

[1] コマンドモード

* カーソルの移動の他文字の削除や検索、保存などが実行できるモード

[2] 入力モード

* 実際にテキストを入力するモード
項目 説明
コマンドモード 「:」or 「/」
前のコマンドを実行 「!!」
元に戻す 「u」

【2】実用例

例1:Pythonを実行する

vim test.py

# 以下の「test.py」をコピペしたら保存して、[Esc]キー
# 『!python3 test.py』
# で実行

test.py

def test_func():
    print('Hello world!')

test_func()

例2:ファイル内をソートする

* 「コマンドモード (:)」にして以下を行う

コマンド例

# ファイル内容をソートする
:%!sort
# % : 現在のバッファ
# ! : システムのコマンドを実行

# -u オプション : ユニーク処理
:%!sort -u

vimでファイル全体をソートする方法 - neovim/vim入門

例3:差分をとる

https://maku77.github.io/vim/file/vimdiff.html

コマンド例:仕事でやった内容

# ファイル内容をソートする
:%!sort

# 新規で開く
:vnew

# 別ファイルを開く
:e other.txt
:%!sort

# 差分 (Ctrl+F: 次へ移動、Ctrl+B: 戻る)
:diff this

例4:重複削除

https://qiita.com/i47_rozary/items/e523f6b7f172fd141d61

:sort u

練習

# 実行前(コピーしてVIMに張り付ける)
table3
table1
table2
table1
table3
table2
table1
table4
table2

# 実行後
table1
table2
table3
table4

例5:囲み文字を入れる

# 全置換
:%s/\(\w\+\)/"\1"/gc

# 全置換(確認無し)
:%s/\(\w\+\)/"\1"/g

https://github.com/clear-code/ClearCode.vim/issues/7

解説

:%s/置換前/置換後/gc

% : ファイル全体を対象とする
s : 置換する
g : 行にある全てのマッチした文字列を置換する
(c : マッチした文字列を1つずつ確認しながら置換する)

練習

# 実行前(コピーしてVIMに張り付ける)
table3
table1
table2
table1
table3
table2
table1
table4
table2

# 実行後
"table1"
"table1"
"table1"
"table2"
"table2"
"table2"
"table3"
"table3"
"table4"

関連記事

VIM ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2016/09/15/233623
VIM ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/09/01/000000
VIM ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/08/04/225503
VIM ~ VimGolf ~
https://dk521123.hatenablog.com/entry/2023/06/09/000000
VI エディタ
https://dk521123.hatenablog.com/entry/2016/04/27/232800
ネットワーク系コマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2016/07/27/214633