Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

AIX初心者:vi editor操作 Tips

$
0
0

はじめに

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現在の行を削除
nddn 行、削除
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現在の行をバッファにコピー
nyyn 行分をバッファにコピー
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上で試しました。なにかあればコメントください。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>