[Software Tips] vi
更新日:2022年9月13日(初版作成日:2020年10月22日)
- viでファイルを開く方法
- 基本
- ファイルを閉じる方法
- ファイルを連続で開く方法
- カーソルを移動する方法
- カーソルが存在する行に下線を引く方法
- マーカーを付ける方法
- 大きく移動する方法
- 先頭、画面の真ん中、行の真ん中、最後に移動する方法
- 単語”h2″に移動する方法
- ファイルを上書き保存/別名保存する方法
- 文字を削除する方法
- 文字を追加する方法
- viのモードを移行する方法
- 1単語を書き換える方法
- “3”という文字までを一括に書き換える方法
- 色々な削除の方法
- 色々な行の削除の方法
- 貼り付け方法
- やり直し方法
- バッファリング(コピー)&ペースの方法
- ファイル名、現カーソル行数/全行数、全体の中の位置(%)、カラム数(半角として、全角有り)の確認方法
- データをソートする方法
- viのヤンク(コピー)で他のアプリにペーストする方法(Clipboardの使い方)
- 行末の^Mの削除する方法
- 空白をカンマに変更する(空白区切りのテキストファイルをCSVファイルに変更する)方法
- 7カラム目の空白列をカンマ列に置き換える方法
- マーカーaからカレント行まで、85行目の空白をつめる方法
- 当該行から100行に渡り、空白2個でインデントする方法
- 指定の範囲の先頭に、6桁の余裕を持って、ドットと空白を後置して、行数を追記する方法(with awk)
- 先頭に、ドットと空白を後置して、行数を追記する方法
- ある部分の文字数を確認する方法
- ファイル中の文字列”xxxx”をカウントする方法
- <を&ltに変換、>を&gtに変換する方法(例えば、htmlをソースコードとしてwebにのせたい場合など)
- 改訂履歴
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”オプションが無い場合の挙動を追記