[精华] VI高级命令集锦
生活随笔
收集整理的這篇文章主要介紹了
[精华] VI高级命令集锦
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
鑒于大家在使用VI?的時候有一定的陌生,在這里借花獻佛,從兄弟版[SHELL]中整理出以下關(guān)于VI編程的高級技巧,希望對大家學習UNIX有所幫助,并希望大家能結(jié)合使用HPUX的心得體會對這些經(jīng)驗進行進一步的擴展。
1.交換兩個字符位置
xp
2.上下兩行調(diào)換
ddp
3.把文件內(nèi)容反轉(zhuǎn)
:g/^/m0/???????(未通過)
4.上下兩行合并?
J
5.刪除所有行?
dG
6.從當前位置刪除到行尾
d$
7.從當前位置復制到行尾
y$?如果要粘貼到其他地方?p?就可以了
由于vi?是建立在?EX?上的?所以?當鍵入?:?時就來到了?EX?命令狀態(tài)?
8.
:ab?string?strings?
例如?":ab?usa?United?States?of?America"?,
當你在文見里插入?usa?時?
United?States?of?America?就蹦出來了
9.
:map?keys?new_seq?
定義你當前?鍵盤命令?
10.
:set?[all]?
vi?or?ex??的編輯狀態(tài)
如?顯示每行?:set?nu?
11.
在命令狀態(tài)下,nyy表示拷貝從光標行起的下n行內(nèi)容,p表示paste,可剛復制的內(nèi)容粘貼在光標處的
下面。?
12.
單個字符替換用r,覆蓋多個字符用R,用多個字符替換一個字符用s,整行替換用S?
13.
?:%s/old_word/new_word/g
這個指令是于在整個文件中替換特定字符串??
?
14.光標控制
k:上移?nk?上移n行
j:下移?nj?下移n行
將光標移到第n行,按下?mk
將光標移到第m行,按下?"ay'k
即將第n到m的行存到a寄存器,以此類推,b,c........寄存器等
這樣就可以將你常用的需要復用的內(nèi)容粘貼到不同的寄存器中以備用
想粘貼到某處,直接將光標移到某地,按下?‘a(chǎn)p?即可,以此類推,b,c........寄存器等
在當前屏幕中
H?跳到第一行
M?跳到中間一行
L?跳到最后一行?
15.
表8-2?刪除命令
刪除命令操作
d?l?刪除當前字符(與x命令功能相同)
d?0?刪除到某一行的開始位置
d?^?刪除到某一行的第一個字符位置(不包括空格或TA?B字符)
d?w?刪除到某個單詞的結(jié)尾位置
d?3?w?刪除到第三個單詞的結(jié)尾位置
d?b?刪除到某個單詞的開始位置
d?W?刪除到某個以空格作為分隔符的單詞的結(jié)尾位置
d?B?刪除到某個以空格作為分隔符的單詞的開始位置
d?7?B?刪除到前面7個以空格作為分隔符的單詞的開始位置
d)?刪除到某個語句的結(jié)尾位置
d?4)?刪除到第四個語句的結(jié)尾位置
d(?刪除到某個語句的開始位置
d?}?刪除到某個段落的結(jié)尾位置
d?{?刪除到某個段落的開始位置
d?7?{?刪除到當前段落起始位置之前的第7個段落位置
d?d?刪除當前行
d?/t?e?x?t?刪除從文本中出現(xiàn)“?t?e?x?t”中所指定字樣的位置,一直向前直到下一個該字樣所出現(xiàn)的
位置(但不包括該字樣)之間的內(nèi)容
d?fc?刪除從文本中出現(xiàn)字符“c”的位置,一直向前直到下一個該字符所出現(xiàn)的位置(包括
該字符)之間的內(nèi)容
d?tc?刪除當前行直到下一個字符“?c”所出現(xiàn)位置之間的內(nèi)容
D?刪除到某一行的結(jié)尾
d?$?刪除到某一行的結(jié)尾
5?d?d?刪除從當前行所開始的5行內(nèi)容
d?L?刪除直到屏幕上最后一行的內(nèi)容
d?H?刪除直到屏幕上第一行的內(nèi)容
d?G?刪除直到工作緩存區(qū)結(jié)尾的內(nèi)容
d?1?G?刪除直到工作緩存區(qū)開始的內(nèi)容
修改命令操作
c?l?更改當前字符
c?w?修改到某個單詞的結(jié)尾位置
c?3?w?修改到第三個單詞的結(jié)尾位置
c?b?修改到某個單詞的開始位置
c?W?修改到某個以空格作為分隔符的單詞的結(jié)尾位置
c?B?修改到某個以空格作為分隔符的單詞的開始位置
c?7?B?修改到前面7個以空格作為分隔符的單詞的開始位置
c?0?修改到某行的結(jié)尾位置
c)?修改到某個語句的結(jié)尾位置
c?4)?修改到第四個語句的結(jié)尾位置
c(?修改到某個語句的開始位置
c?}?修改到某個段落的結(jié)尾位置
c?{?修改到某個段落的開始位置
c?7?{?修改到當前段落起始位置之前的第7個段落位置
c?tc?修改當前行直到下一個字符c所出現(xiàn)位置之間的內(nèi)容
C?修改到某一行的結(jié)尾
c?c?修改當前行
5?c?c?修改從當前行所開始的5行內(nèi)容
?.重復上一次修改!??
?
表8-4?替換命令
替換命令操作
s?將當前字符替換為一個或多個字符
S?將當前行替換為一個或多個字符
5?s?將從當前字符開始的5個字符替換為一個或多個字符
vi替換使用規(guī)則:
:g/s1/s/s2/s3/g
第一個g表示對每一個包括s1的行都進行替換,第二個g表示對每一行包括s1的行所有的s2都用s3替換
s表示替換,s2是要被替換的字符串,他可以和s1相同(如果相同的話用//代替),s3是替換字符串?
16.
fx
往右移動到?x?字符上
Fx
往左移動到?x?字符上
tx
往右移動到?x?字符前
Tx
往左移動到?x?字符后
(注意:以上四個命令中,其中x是鍵入的字符)
;
分號,配合?f?和?t?使用,重復一次?
,
逗號,配合?f?和?t?使用,反方向重復一次
17.?vi?環(huán)境選項??Solaris?ksh
noautoindent????????????nomodelines?????????????????????noshowmode
autoprint???????????????nonumber????????????????????????noslowopen
noautowrite?????????????nonovice????????????????????????tabstop=8
nobeautify??????????????nooptimize??????????????????????taglength=0
directory=/var/tmp??????paragraphs=IPLPPPQPP?LIpplpipnpbtags=tags?/usr/lib/tags
noedcompatible??????????prompt??????????????????????????tagstack
noerrorbells????????????noreadonly??????????????????????term=vt100
noexrc??????????????????redraw??????????????????????????noterse
flash???????????????????remap???????????????????????????timeout
hardtabs=8??????????????report=5????????????????????????ttytype=vt100
noignorecase????????????scroll=11???????????????????????warn
nolisp??????????????????sections=NHSHH?HUuhsh+c?????????window=23
nolist??????????????????shell=/bin/ksh??????????????????wrapscan
magic???????????????????shiftwidth=8????????????????????wrapmargin=0
mesg????????????????????noshowmatch?????????????????????nowriteany
?
For?C-Shell:
setenv?EXINIT?"set?nu"
For?Bourne?or?Korn?Shell:
EXINIT="set?nu";?export?EXINIT?
For?Korn?Shell?Only?(alternate?method):?
typeset?-x?EXINIT="set?nu"
在?.profile?里設(shè)置?vi?的環(huán)境選項?,?以上均測試過?
18.標記文本
mchar ?用字母char標記當前光標的位置
`char? 移至char所標記處
'char ?移至char標記所在行的開頭處
" ?移至當前行上一次所在位置(在光標移動之后)――一個雙引號
'' 移至當前行上第一次所在位置的行的開頭處(在光標移動之后)――兩個單引號
19.
同時vi多個文件時,CTRL-SHIFT-6回到上一個文件,在本次vi的文件和上次vi的文件之間切換。
但是我發(fā)現(xiàn)一個BUG:在用CTRL-SHIFT-6切換到上一個文件后,用:args查看多文件vi狀態(tài)時,
屏幕底部仍然顯示目前vi的是剛才的文件。
(在HP-UX,Solaris,AIX上通過)
也可以使用:
:e#
進行切換
20.
sco?下VI?要在文本前同樣的字符加用
%s/^/要加的內(nèi)容/g??????要在文本后同樣的字符加
%s/$/要加的內(nèi)容/g??
21.
如何去掉文本中的?^M?硬回車?不必用binary傳回去再ascii傳回來的方式,用shell或者unix語句實現(xiàn)。
cat?filename?|tr?-d?'\015'?>;newfile
不同的unix系統(tǒng)還存在一些其他不同的命令,如:doscp?
sed?也可以實現(xiàn)這個功能.?
dos2unix?filename?filename2
反之
unix2dos?filename?filename2?
在vi?中用:$s/^M//g
^是crtl-V?crtl-M??
22.如何在“unix命令行”下將一個文件的某字符串用另一個串換掉
?sed?'s/string1/string2/gp'?file1?>;?file2
?
?
23.將/etc/hosts下所有的地址都ping?2次
????1??#/usr/bin/sh
????2??#grad?/etc/hosts?and?ping?each?address
????3??cat?/etc/hosts|grep?-v?'^#'?|?while?read?LINE
????4??do
????5???ADDR=`awk?'{print?$1}'`
????6??for?MACHINE?in?$ADDR
????7???do
????8?????ping??$MACHINE?-n?2
????9???done
???10??done
1.交換兩個字符位置
xp
2.上下兩行調(diào)換
ddp
3.把文件內(nèi)容反轉(zhuǎn)
:g/^/m0/???????(未通過)
4.上下兩行合并?
J
5.刪除所有行?
dG
6.從當前位置刪除到行尾
d$
7.從當前位置復制到行尾
y$?如果要粘貼到其他地方?p?就可以了
由于vi?是建立在?EX?上的?所以?當鍵入?:?時就來到了?EX?命令狀態(tài)?
8.
:ab?string?strings?
例如?":ab?usa?United?States?of?America"?,
當你在文見里插入?usa?時?
United?States?of?America?就蹦出來了
9.
:map?keys?new_seq?
定義你當前?鍵盤命令?
10.
:set?[all]?
vi?or?ex??的編輯狀態(tài)
如?顯示每行?:set?nu?
11.
在命令狀態(tài)下,nyy表示拷貝從光標行起的下n行內(nèi)容,p表示paste,可剛復制的內(nèi)容粘貼在光標處的
下面。?
12.
單個字符替換用r,覆蓋多個字符用R,用多個字符替換一個字符用s,整行替換用S?
13.
?:%s/old_word/new_word/g
這個指令是于在整個文件中替換特定字符串??
?
14.光標控制
k:上移?nk?上移n行
j:下移?nj?下移n行
將光標移到第n行,按下?mk
將光標移到第m行,按下?"ay'k
即將第n到m的行存到a寄存器,以此類推,b,c........寄存器等
這樣就可以將你常用的需要復用的內(nèi)容粘貼到不同的寄存器中以備用
想粘貼到某處,直接將光標移到某地,按下?‘a(chǎn)p?即可,以此類推,b,c........寄存器等
在當前屏幕中
H?跳到第一行
M?跳到中間一行
L?跳到最后一行?
15.
表8-2?刪除命令
刪除命令操作
d?l?刪除當前字符(與x命令功能相同)
d?0?刪除到某一行的開始位置
d?^?刪除到某一行的第一個字符位置(不包括空格或TA?B字符)
d?w?刪除到某個單詞的結(jié)尾位置
d?3?w?刪除到第三個單詞的結(jié)尾位置
d?b?刪除到某個單詞的開始位置
d?W?刪除到某個以空格作為分隔符的單詞的結(jié)尾位置
d?B?刪除到某個以空格作為分隔符的單詞的開始位置
d?7?B?刪除到前面7個以空格作為分隔符的單詞的開始位置
d)?刪除到某個語句的結(jié)尾位置
d?4)?刪除到第四個語句的結(jié)尾位置
d(?刪除到某個語句的開始位置
d?}?刪除到某個段落的結(jié)尾位置
d?{?刪除到某個段落的開始位置
d?7?{?刪除到當前段落起始位置之前的第7個段落位置
d?d?刪除當前行
d?/t?e?x?t?刪除從文本中出現(xiàn)“?t?e?x?t”中所指定字樣的位置,一直向前直到下一個該字樣所出現(xiàn)的
位置(但不包括該字樣)之間的內(nèi)容
d?fc?刪除從文本中出現(xiàn)字符“c”的位置,一直向前直到下一個該字符所出現(xiàn)的位置(包括
該字符)之間的內(nèi)容
d?tc?刪除當前行直到下一個字符“?c”所出現(xiàn)位置之間的內(nèi)容
D?刪除到某一行的結(jié)尾
d?$?刪除到某一行的結(jié)尾
5?d?d?刪除從當前行所開始的5行內(nèi)容
d?L?刪除直到屏幕上最后一行的內(nèi)容
d?H?刪除直到屏幕上第一行的內(nèi)容
d?G?刪除直到工作緩存區(qū)結(jié)尾的內(nèi)容
d?1?G?刪除直到工作緩存區(qū)開始的內(nèi)容
修改命令操作
c?l?更改當前字符
c?w?修改到某個單詞的結(jié)尾位置
c?3?w?修改到第三個單詞的結(jié)尾位置
c?b?修改到某個單詞的開始位置
c?W?修改到某個以空格作為分隔符的單詞的結(jié)尾位置
c?B?修改到某個以空格作為分隔符的單詞的開始位置
c?7?B?修改到前面7個以空格作為分隔符的單詞的開始位置
c?0?修改到某行的結(jié)尾位置
c)?修改到某個語句的結(jié)尾位置
c?4)?修改到第四個語句的結(jié)尾位置
c(?修改到某個語句的開始位置
c?}?修改到某個段落的結(jié)尾位置
c?{?修改到某個段落的開始位置
c?7?{?修改到當前段落起始位置之前的第7個段落位置
c?tc?修改當前行直到下一個字符c所出現(xiàn)位置之間的內(nèi)容
C?修改到某一行的結(jié)尾
c?c?修改當前行
5?c?c?修改從當前行所開始的5行內(nèi)容
?.重復上一次修改!??
?
表8-4?替換命令
替換命令操作
s?將當前字符替換為一個或多個字符
S?將當前行替換為一個或多個字符
5?s?將從當前字符開始的5個字符替換為一個或多個字符
vi替換使用規(guī)則:
:g/s1/s/s2/s3/g
第一個g表示對每一個包括s1的行都進行替換,第二個g表示對每一行包括s1的行所有的s2都用s3替換
s表示替換,s2是要被替換的字符串,他可以和s1相同(如果相同的話用//代替),s3是替換字符串?
16.
fx
往右移動到?x?字符上
Fx
往左移動到?x?字符上
tx
往右移動到?x?字符前
Tx
往左移動到?x?字符后
(注意:以上四個命令中,其中x是鍵入的字符)
;
分號,配合?f?和?t?使用,重復一次?
,
逗號,配合?f?和?t?使用,反方向重復一次
17.?vi?環(huán)境選項??Solaris?ksh
noautoindent????????????nomodelines?????????????????????noshowmode
autoprint???????????????nonumber????????????????????????noslowopen
noautowrite?????????????nonovice????????????????????????tabstop=8
nobeautify??????????????nooptimize??????????????????????taglength=0
directory=/var/tmp??????paragraphs=IPLPPPQPP?LIpplpipnpbtags=tags?/usr/lib/tags
noedcompatible??????????prompt??????????????????????????tagstack
noerrorbells????????????noreadonly??????????????????????term=vt100
noexrc??????????????????redraw??????????????????????????noterse
flash???????????????????remap???????????????????????????timeout
hardtabs=8??????????????report=5????????????????????????ttytype=vt100
noignorecase????????????scroll=11???????????????????????warn
nolisp??????????????????sections=NHSHH?HUuhsh+c?????????window=23
nolist??????????????????shell=/bin/ksh??????????????????wrapscan
magic???????????????????shiftwidth=8????????????????????wrapmargin=0
mesg????????????????????noshowmatch?????????????????????nowriteany
?
For?C-Shell:
setenv?EXINIT?"set?nu"
For?Bourne?or?Korn?Shell:
EXINIT="set?nu";?export?EXINIT?
For?Korn?Shell?Only?(alternate?method):?
typeset?-x?EXINIT="set?nu"
在?.profile?里設(shè)置?vi?的環(huán)境選項?,?以上均測試過?
18.標記文本
mchar ?用字母char標記當前光標的位置
`char? 移至char所標記處
'char ?移至char標記所在行的開頭處
" ?移至當前行上一次所在位置(在光標移動之后)――一個雙引號
'' 移至當前行上第一次所在位置的行的開頭處(在光標移動之后)――兩個單引號
19.
同時vi多個文件時,CTRL-SHIFT-6回到上一個文件,在本次vi的文件和上次vi的文件之間切換。
但是我發(fā)現(xiàn)一個BUG:在用CTRL-SHIFT-6切換到上一個文件后,用:args查看多文件vi狀態(tài)時,
屏幕底部仍然顯示目前vi的是剛才的文件。
(在HP-UX,Solaris,AIX上通過)
也可以使用:
:e#
進行切換
20.
sco?下VI?要在文本前同樣的字符加用
%s/^/要加的內(nèi)容/g??????要在文本后同樣的字符加
%s/$/要加的內(nèi)容/g??
21.
如何去掉文本中的?^M?硬回車?不必用binary傳回去再ascii傳回來的方式,用shell或者unix語句實現(xiàn)。
cat?filename?|tr?-d?'\015'?>;newfile
不同的unix系統(tǒng)還存在一些其他不同的命令,如:doscp?
sed?也可以實現(xiàn)這個功能.?
dos2unix?filename?filename2
反之
unix2dos?filename?filename2?
在vi?中用:$s/^M//g
^是crtl-V?crtl-M??
22.如何在“unix命令行”下將一個文件的某字符串用另一個串換掉
?sed?'s/string1/string2/gp'?file1?>;?file2
?
?
23.將/etc/hosts下所有的地址都ping?2次
????1??#/usr/bin/sh
????2??#grad?/etc/hosts?and?ping?each?address
????3??cat?/etc/hosts|grep?-v?'^#'?|?while?read?LINE
????4??do
????5???ADDR=`awk?'{print?$1}'`
????6??for?MACHINE?in?$ADDR
????7???do
????8?????ping??$MACHINE?-n?2
????9???done
???10??done
總結(jié)
以上是生活随笔為你收集整理的[精华] VI高级命令集锦的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Liunx 安装mysql 5.6.16
- 下一篇: elasticsearch 5.1 问题