[Software Tips] vi

更新日:2022年9月13日(初版作成日:2020年10月22日)

  1. viでファイルを開く方法
  2. 基本
  3. ファイルを閉じる方法
  4. ファイルを連続で開く方法
  5. カーソルを移動する方法
  6. カーソルが存在する行に下線を引く方法
  7. マーカーを付ける方法
  8. 大きく移動する方法
  9. 先頭、画面の真ん中、行の真ん中、最後に移動する方法
  10. 単語”h2″に移動する方法
  11. ファイルを上書き保存/別名保存する方法
  12. 文字を削除する方法
  13. 文字を追加する方法
  14. viのモードを移行する方法
  15. 1単語を書き換える方法
  16. “3”という文字までを一括に書き換える方法
  17. 色々な削除の方法
  18. 色々な行の削除の方法
  19. 貼り付け方法
  20. やり直し方法
  21. バッファリング(コピー)&ペースの方法
  22. ファイル名、現カーソル行数/全行数、全体の中の位置(%)、カラム数(半角として、全角有り)の確認方法
  23. データをソートする方法
  24. viのヤンク(コピー)で他のアプリにペーストする方法(Clipboardの使い方)
  25. 行末の^Mの削除する方法
  26. 空白をカンマに変更する(空白区切りのテキストファイルをCSVファイルに変更する)方法
  27. 7カラム目の空白列をカンマ列に置き換える方法
  28. マーカーaからカレント行まで、85行目の空白をつめる方法
  29. 当該行から100行に渡り、空白2個でインデントする方法
  30. 指定の範囲の先頭に、6桁の余裕を持って、ドットと空白を後置して、行数を追記する方法(with awk)
  31. 先頭に、ドットと空白を後置して、行数を追記する方法
  32. ある部分の文字数を確認する方法
  33. ファイル中の文字列”xxxx”をカウントする方法
  34. <を&ltに変換、>を&gtに変換する方法(例えば、htmlをソースコードとしてwebにのせたい場合など)
  35. 改訂履歴

viでファイルを開く方法

% vi ファイル名

ここの%は、Unix系プロンプトの意味。vimの場合、vim

基本

[esc]
i
:
/

順に、コマンドモード、入力モード、コロンコマンドモード、検索コマンドモード

:quit
:q
:q!

qはquitの省略形
:でコロンモードに入るqを押下してリターンキーを押下、!マークで強制的に閉じる(ファイルの保存をせずに強制終了)

ファイルを閉じる方法

:quit
:q
:q!

qはquitの省略形
:でプロンプトモードに入るqを押下してリターンキーを押下、!マークで強制的に閉じる(ファイルの保存をせずに強制終了)

ファイルを連続で開く方法

#/bin/bash
for i in {1..20} ; do
  file=`awk NR==${i} file_list.txt`
  vi $file
done

カーソルを移動する方法

j
l
h
k

jで下に移動する、lで右に移動する、hで左に移動する、kで上に移動する

カーソルが存在する行に下線を引く方法

:set cursorline

マーカーを付ける方法

ma

mでmakerの意味、当該カーソル位置に、aという名前を付ける。呼び出しは、’aとなる

大きく移動する方法

G
control-F
:1
‘a

Gで最終行へ移動する、control-Fで1ページ下に移動する、:1で最初の行に移動する、’aでマーカーaに移動する

先頭、画面の真ん中、行の真ん中、最後に移動する方法

^
gm
gM
$

先頭に移動する
画面の真ん中に移動する
行の真ん中に移動する
最後に移動する

単語”h2″に移動する方法

/h2

/でサーチモードに入る、h2+リターンキーで検索開始

ファイルを上書き保存/別名保存する方法

:write
:w
:w temp.txt
:wq

wはwriteの省略形
:でプロンプトモードに入るwを押下してリターンキーを押下
ファイル名を後置すると、元のファイルはいじらずに、新しいファイルとして生成する
wqで、保存終了することが可能

文字を削除する方法

x

カーソル位置の文字を消す

文字を追加する方法

ii[esc]

カーソル位置にiを追記する、一文字目のiが入力モードに入る、その後のiで入力、[esc]キーでコマンドモード復帰

viのモードを移行する方法

i
[esc]
:

iで入力モード、[esc]でコマンドモード、:でプロンプトモード入る
基本的には、コマンドモード(h,j,k,lでカーソルが動く状態)にいるのが基本なので、[esc]キーを連打

1単語を書き換える方法

cw

change wordの意味
test1 test2 test3
test1をtempに変更する場合には、先頭tの位置にカーソルを持っていって、cwとコマンドを打って、tempと入力し、[esc]を押下する
備考)日本語の場合、少し違うので注意

“3”という文字までを一括に書き換える方法

cf3

change find xxxの意味
test1 test2 test3
test1 test2 test3をtempに変更する場合には、先頭のtの位置にカーソルを持っていって、cf3とコマンドを打って、tempと入力し、[esc]を押下する

色々な削除の方法

3x
cw[esc]
cf2[esc]
d$

3文字削除
1単語削除
“2”までの文字列全て削除
dはdeleteの意味、行末まで削除

色々な行の削除の方法

dd
3dd
d’a
dG
:’a,.s/b.\{}$//

当該行の削除
3行削除
マーカーaまで全行削除
当該行から以下全て削除
マーカーaからカレント行までbが出たらそこから行末まで全て削除
備考)削除したものは自動的にバッファリング(コピー)されている

貼り付け方法

p

pasteの意味、カーソル位置に貼り付ける

やり直し方法

u

undoの意味、一つ前の入力を取り消す

バッファリング(コピー)&ペースの方法

yy
3y
:%y

当該行のヤンク(コピー)
3行のヤンク(コピー)
全てコピー
クリップボード(下参照)が使えるようになっていれば、他のアプリへのコピペも可能

ファイル名、現カーソル行数/全行数、全体の中の位置(%)、カラム数(半角として、全角有り)の確認方法

:file
:f

下は省略形

データをソートする方法

:’a,.sort
:’a,.sort!

マーカーaからカレント行までを先頭の単語(スペースやカンマで区切られた)で、ソートする
!マークを付けると逆順にソートする
数字、アルファベット、順でソートする(数字が先、日本語でもあいうえお順でソートできる)

viのヤンク(コピー)で他のアプリにペーストする方法(Clipboardの使い方)

:set

で、clipboard=unnamedとあれば、そのままコピー&ペーストができる
“clipboard+”の場合には、ホームディレクトリに”.vimrc”というファイルを作って、set clipboard+=unnamedと書いておく
“clipboard-“の場合には、clipboardが使えないので、最新のvimをインストールする

% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”)
% brew install vim

で、パスを変更する(例えば、bashを使っていて、/usr/local/Cellar/vim/8.2.0100/bin/vimなら、alias vi=’/usr/local/Cellar/vim/8.2.0100/bin/vim’と.bashrcに書いておく)

行末の^Mの削除する方法

:%s/^M//g

:s/XXX/YYY/ 、この[s]ubstitute は置換を示し、XXXをYYYに変換するという意味になる
最後に”g”を追加すると、Yes/Noチェック無しに全て置換する
%は全部を示す、control+v とcontrol+m で ^M を入力、YYYを入力しなければ、XXXの削除になる

空白をカンマに変更する(空白区切りのテキストファイルをCSVファイルに変更する)方法

:%s/ \+/,/g
(空白に注意)

“+”は、1回以上の繰り返しを意味する
他の項目については、一つ前参照のこと

7カラム目の空白列をカンマ列に置き換える方法

:’a,.s/^\(.\{6\}\) /\1,/g
(空白に注意)

マーカーaからカレント行までの置換を行う
先頭から任意の文字6個分をバッファしつつ指定し、空白をさらに指定する
変換後の文字列を、バッファした6個分の文字にし、その後、空白の位置をカンマに置き換える

マーカーaからカレント行まで、85行目の空白をつめる方法

:’a,.s/^\(.\{84\}\) /\1/g
(空白に注意)

当該行から100行に渡り、空白2個でインデントする方法

:.,+100s/^/  /
(空白2個に注意)

カレント行から100行目を置換する
先頭に
空白2個

指定の範囲の先頭に、6桁の余裕を持って、ドットと空白を後置して、行数を追記する方法(with awk)

:’a,.!awk ‘{printf “\%6d\%s\%s\n”, NR, “. “, $0}’
(空白に注意)

マーカーaからカレント行まで、awkを発動する
printfで文字列の整形をする
%6dで整数で6桁、%sで文字列、%sで文字列を指定する
NRはawk開始の行数を記入、文字列”. “を追記、当該行の全文字列$0を追記

先頭に、ドットと空白を後置して、行数を追記する方法

:’a,.s/^/\=line(“.”) . “. “/g
(空白に注意)

先頭にカレント行番号\=line(“.”)を挿入
合わせて、”. “も挿入
参考)def yasuharu519(self):

ある部分の文字数を確認する方法

:’a,s/./&/g

マーカーaから、カレント行までの、任意の一文字をその文字で置き換える(何もしない)。
そして、その処理回数を持って、文字数とする。

ファイル中の文字列”xxxx”をカウントする方法

:%s/xxxx//gn

置換すると見せかけて、全てNoを選択することで、xxxxを数える
(”s”は置換だが、”gn”で全て置換しないを選択。結果的にxxxxの個数が出力されるだけ)

<を&ltに変換、>を&gtに変換する方法(例えば、htmlをソースコードとしてwebにのせたい場合など)

:’a,.s/</\&lt/g
:’a,.s/>/\&gt/g
(入力時は半角で入力のこと)

マーカーは”a”で、変更箇所までカーソルを持っていって、”s”は置換。&をエスケープ、”g”は全て。
gを付けない場合は、各行の先頭のカギカッコのみ変換する。
(実際は半角入力なので、ご注意ください。)

改訂履歴

2022年09月13日:アイキャッチ画像の変更
2022年08月30日:色々追加
2022年07月27日:WordPressの目次に対応、行番号、空白カンマ入れ替え追加
2022年07月27日:WordPressの目次に対応、行番号、空白カンマ入れ替え追加
2022年07月23日:WordPress用に色を変更
2022年07月23日:sortの使いかた追記
2021年12月04日:”空白をカンマに変更する”を追記
2021年11月16日:htmlタグの変更
2021年10月17日:カギカッコ変換時の”g”オプションが無い場合の挙動を追記

タイトルとURLをコピーしました