LoginSignup
3
3

More than 5 years have passed since last update.

AIX初心者:vi editor操作 Tips

Posted at

はじめに

AIX上でシェル・スクリプトとかを書くときに、viやemacsなど、いくつかeditorが提供されていますが、自分はviを良く利用します。
似たようなことをまとめている人が多数ですが、AIXをこれから触っていく人向けへのTipsとして、自身の備忘録も兼ねて、以下にviの操作方法をまとめておきます。

起動

作法 意味
vi ファイル名   編集対象のファイルを開く(複数ファイルも可)
vi +n ファイル名 n 行目から表示する
vi +/文字列 ファイル名 文字列が存在する行から表示する

入力・編集 

※コマンドモードでここのコマンドを入力すると入力モードになります

作法 意味
a カーソルの右から入力開始
A 行末から入力開始
i カーソルの左から入力開始
I 行の頭から入力開始
o 現在の行の下に1行挿入し、その行頭から入力開始
O 現在の行の上に1行挿入し、その行頭から入力開始
J 次の行と現在の行とを結合する
nJ 下のn行を現在の行とを結合する

削除

作法 意味
x カーソル上の1文字削除
X カーソルの左の文字を1文字削除
dd 現在の行を削除
ndd n 行、削除
dw カーソル上の一単語を削除
df 字 カーソル位置から指定した字 までを削除 *1
d$ カーソル位置から行の最後までを削除
d^ カーソル位置から行の先頭までを削除
:行1, 行2 d 行1 から行2 を削除

置換

作法 意味
r カーソル上の1文字を他の1文字に置換
s カーソルのある1文字を他の文字列で置換 *2
S 現在の行を他の文字列で置換
cw カーソル位置からその単語の最後までを置換
cf 字 カーソル位置から指定した字 までを置換 *3
C カーソル位置から行の最後までを置換
:%s/置換え前/置換え後 置換え前の文字列を、置換え後の文字列で置換(各行で最も近くにある文字列一つに対してのみ実行
:%s/置換え前/置換え後/g ファイルの中すべての文字列に対して、置換えを行う
~(チルダ) 大文字/小文字を変更

検索

作法 意味
/<文字列> 文字列 を検索する
?<文字列> 文字列を検索する(逆方向)
n 順方向へ検索する
N 逆方向へ検索する

Cut&Paste

作法 意味
yy 現在の行をバッファにコピー
nyy n 行分をバッファにコピー
yw 単語をバッファにコピー
p バッファ内のテキストを挿入※(文字、単語はカーソルの右に、行は現在の行の下に挿入される)
P バッファ内のテキストを挿入※(挿入位置はpの逆。文字、単語はカーソルの左に、行は現在の行の上に挿入される)

利用例

下記のようなシェルの中身を上記コマンドで編集していきます。

sample.sh
#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   echo 'hello test from uss' 
   sleep 5
done

例1: 'df 字'でカーソルから指定した箇所(字)まで削除

カーソルをechoの'e'のところへ移動させ、'dfe'と入力し、helloの'e'までを削除します。

コマンド実行前

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   echo 'hello test from uss' <=echoの'e'にカーソルを移動し、’dfe’と入力
   sleep 5
done

コマンド実行後

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   llo test from uss'  
   sleep 5
done

「echo 'hello ~」でechoの'e'からhelloの'e'まで削除されました。

例2:sでカーソル上の1文字を他の文字列に置換

今度はカーソルをhelloの'o'へ移動させ、sを入力後、任意の文字列(例:aaa)に置換します。

コマンド実行前

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   echo 'hello test from uss' <=helloの'o'にカーソルを移動し、sを入力
   sleep 5
done

コマンド実行後
oが'$'に変わり、任意の文字列が入力可能になるので、aaaを入力

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   echo 'hell$ test from uss' 
   sleep 5
done

置換後
入力モードを終了させる(esc)

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   echo 'hellaaa test from uss' 
   sleep 5
done

'o'が'aaa'に置換されました。
※'s'の代わりに'r'を実行すると、カーソル上の1文字だけ置換(入力)でき、置換後は自動的に入力モードも終了します。※'r'実行後は's'とは違って対象の文字が'$'になりません。

例3:cfで置換

例1のようにechoの'e'にカーソルを移動させ、cfと入力したあとに、置き換えたい文字までの範囲を指定して置換します。
例えば、範囲をhelloの'l'までならcflと入力します。
コマンド実行前

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   echo 'hello test from uss' <=echoのeにカーソルを移動し、cflを入力
   sleep 5
done

コマンド実行後
例2と同じように、指定した箇所に'$'が表示されます

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   echo 'he$lo test from uss'  <=
   sleep 5
done

置き換えたい文字を入力(例:AAAと入力)し、Escにて入力を終了させます

#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   AAAo 'he$lo test from uss'  <=AAAを入力後、Esc
   sleep 5
done
#/usr/bin/sh!
a=0
while [ $a -ne 10 ]
do
   a=`expr $a + 1`
   AAAlo test from uss'  <=置換
   sleep 5
done
~

できました。

おわりに

直感的にわかりにくいものは例も交えてみました。
全部のコマンドを記載したわけでは無いのですが、ここで記載したものは一通りAIX上で試しました。なにかあればコメントください。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3