Solaris VI命令複習

來源:互聯網
上載者:User

幾天不用就手生了,複習一下:

交換兩個字元位置
ddp
上下兩行調換
J
上下兩行合并
dG
刪除所有行
d$
從當前位置刪除到行尾
y$
從當前位置複製到行尾, 如果要粘貼到其他地方 p 就可以了

:ab string strings
例如 ":ab usa United States of America" ,
當你在文見裡插入 usa 時
United States of America 就蹦出來了
:g/^/m0
把檔案內容反轉
:map keys new_seq
定義你當前 鍵盤命令
:set [all]
vi or ex 的編輯狀態
如 顯示每行 :set nu
:X
然後系統會提示輸入密碼, 輸入密碼後存檔退出, 儲存後就加密了
下次編輯時使用vi -x filename, 系統會提示你輸入密碼

在命令狀態下,nyy表示拷貝從游標行起的下n行內容,p表示paste,粘貼下來在游標處。

我常用到的單個字元替換用r,覆蓋多個字元用R,用多個字元替換一個字元用s,整行替換用S

:%s/old_word/new_word/g
這個指令是於在整個檔案中替換特定字串

將游標移到第n行,按下 mk
將游標移到第m行,按下 "ay'k
即將第n到m的行存到a寄存器,以此類推,b,c........寄存器等

不好意思,補充一下,想粘貼到某處,直接將游標移到某地,按下 ‘ap 即可

刪除命令操作
d l 刪除當前字元(與x命令功能相同)
d 0 刪除到某一行的開始位置
d ^ 刪除到某一行的第一個字元位置(不包括空格或TA B字元)
d w 刪除到某個單詞的結尾位置
d 3 w 刪除到第三個單詞的結尾位置
d b 刪除到某個單詞的開始位置
d W 刪除到某個以空格作為分隔字元的單詞的結尾位置
d B 刪除到某個以空格作為分隔字元的單詞的開始位置

刪除命令操作
d 7 B 刪除到前面7個以空格作為分隔字元的單詞的開始位置
d) 刪除到某個語句的結尾位置
d 4) 刪除到第四個語句的結尾位置
d( 刪除到某個語句的開始位置
d } 刪除到某個段落的結尾位置
d { 刪除到某個段落的開始位置
d 7 { 刪除到當前段落起始位置之前的第7個段落位置
d d 刪除當前行
d /t e x t 刪除從文本中出現“ t e x t”中所指定字樣的位置,一直向前直到下一個該字樣所出現的
位置(但不包括該字樣)之間的內容
d fc 刪除從文本中出現字元“c”的位置,一直向前直到下一個該字元所出現的位置(包括
該字元)之間的內容
d tc 刪除當前行直到下一個字元“ c”所出現位置之間的內容
D 刪除到某一行的結尾
d $ 刪除到某一行的結尾
5 d d 刪除從當前行所開始的5行內容
d L 刪除直到螢幕上最後一行的內容
d H 刪除直到螢幕上第一行的內容
d G 刪除直到工作緩衝區結尾的內容
d 1 G 刪除直到工作緩衝區開始的內容

修改命令操作
c l 更改當前字元
c w 修改到某個單詞的結尾位置
c 3 w 修改到第三個單詞的結尾位置
c b 修改到某個單詞的開始位置
c W 修改到某個以空格作為分隔字元的單詞的結尾位置
c B 修改到某個以空格作為分隔字元的單詞的開始位置
c 7 B 修改到前面7個以空格作為分隔字元的單詞的開始位置
c 0 修改到某行的結尾位置
c) 修改到某個語句的結尾位置
c 4) 修改到第四個語句的結尾位置
c( 修改到某個語句的開始位置
c } 修改到某個段落的結尾位置
c { 修改到某個段落的開始位置
c 7 { 修改到當前段落起始位置之前的第7個段落位置
c tc 修改當前行直到下一個字元c所出現位置之間的內容
C 修改到某一行的結尾
c c 修改當前行
5 c c 修改從當前行所開始的5行內容

替換命令操作
s 將當前字元替換為一個或多個字元
S 將當前行替換為一個或多個字元
5 s 將從當前字元開始的5個字元替換為一個或多個字元

vi替換使用規則:
:g/s1/s/s2/s3/g
第一個g表示對每一個包括s1的行都進行替換,第二個g表示對每一行包括s1的行所有的s2都用s3替換
s表示替換,s2是要被替換的字串,他可以和s1相同(如果相同的話用//代替),s3是替換字串

fx
往右移動到 x 字元上
Fx
往左移動到 x 字元上
tx
往右移動到 x 字元前
Tx
往左移動到 x 字元後
(注意:以上四個命令中,其中x是鍵入的字元)
;
分號,配合 f 和 t 使用,重複一次
,
逗號,配合 f 和 t 使用,反方向重複一次

建議誰把 :set all 出來的參數及其用法說明一下。注意註明UNIX平台,我發現幾個平台下有些差異。

加密碼我在8 上(bsh) 實驗成功 所以大家最好還是加上 環境!!

vi 環境選項 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 裡設定 vi 的環境選項 , 以上均測試過

怎麼沒有介紹標記的,做標記對那種大的程式檔案閱讀十分有協助。
建議大家使用。

標記文本
  mchar   用字母char標記當前游標的位置
  `char   移至char所標記處
  'char   移至char標記所在行的開頭處
  "     移至當前行上一次所在位置(在游標移動之後)――一個雙引號
  ''    移至當前行上第一次所在位置的行的開頭處(在游標移動之後)――兩個單引號

.重複上一次修改!

大家都說了這麼多了,我也來說兩句
在當前螢幕中
H 跳到第一行
M 跳到中間一行
L 跳到最後一行

同時vi多個檔案時,CTRL-SHIFT-6回到上一個檔案,在本次vi的檔案和上次vi的檔案之間切換。其實就是一些文檔寫的 ^^
但是我發現一個BUG:在用CTRL-SHIFT-6切換到上一個檔案後,用:args查看多檔案vi狀態時,螢幕底部仍然顯示目前vi的是剛才的檔案。
(在HP-UX,Solaris,AIX上通過)

還是使用
:e#
切換比較好,呵呵

%s/^/要加的內容/g 要在文本後同樣的字元加
%s/$/要加的內容/g vi的使用確實太多,大家多多總結交流!!!

追加到緩衝區
對於已經有內容的緩衝區,可以繼續追加內容在其後面,例如:
"Ad4w 刪除游標後4個字,並附加到緩衝區a
"Ay) 取樣從游標到檔案尾的內容,並附加到緩衝區a
"K3yy 取樣從游標所在行起的3行內容,並附加到緩衝區k

注意:在追加緩衝區的命令中,原緩衝區的名字一定要大寫,才能將內容追加進去,否則是覆蓋原緩衝區的內容。追加內容在原緩衝區末尾另起一行。

清理掉DOS文本中的^M可以在:1,$s/^M//g,其中^M是CTRL+V, CTRL+M。

刪除從當前行開始到最後一行的所有內容
:.,$d
在:命令列模式下,首先可以確定命令的範圍
.表示當前行;數字表示行號,如1表示第一行,2表示第二行;$表示最後一行
範圍用,分隔
然後用命令
d表示刪除,y表示複製......大家都知道的

最後說一句,%表示全文
:%d
是刪除全文

給“南非蜘蛛”補充一下,hehe
在:命令列模式下,首先可以確定命令的範圍
.表示當前行;數字表示行號,如1表示第一行,2表示第二行;$表示最後一行
範圍用,分隔
...

慎用:$d

:$d 只是刪除最後一行嘛,用錯了還不算最壞的結果,呵呵

請教aix,ksh下:
一行>=2048個字元時,無法顯示,怎麼辦?

在vi中好像應該沒有什麼辦法了,這是vi的Program Limits中的Maximum Line Length限制。試一試用UltraEdit讀讀看吧

有的環境不能用uedit
可以折行嗎?

折行
:set wrapmargin=4

下面引用由bjchenxu在 2002/09/05 09:07am 發表的內容:
折行
:set wrapmargin=4

怎麼解釋?結果如何?

不行呀
A line cannot be longer than 2048 characters.

我的只能解決顯示問題,如果說vi裡不能存放這麼多字元,就比較麻煩了
另外問一句,2048個字元已經夠長了,為什麼要放更多的,沒準我們可以從源頭上解決問題

老外的程式的log檔案,有些行就這麼長,以至於影響了後面行的顯示;
more,pg等可以折行

我還是不會用:X加密,能不能說的詳細一點,:X後,提示輸入key:然後呢?mark what 後輸入什麼呢,下次如何在開啟呢?more 可以正常看嗎?
xiexie!

你使用的什麼平台的UNIX呢?我從來沒有見到mark what出現過啊
more是不能正常看的,用vi -x filename,然後輸入密碼就可以了

好像再另存不了不加密的了

用 :wq 或者 :wq! 另存

請高手指點迷精:vi中如何在每行的倒數第二個字元處插入一個字元??

把Tab全部換成斷行符號,應該怎麼作啊?
:1,$ s/ /
/g
不行

^M (Ctrl+V+M)就是斷行符號。

vi加密不同的unix可能不同.
俺在HP-UX下,用X加密的檔案只輸key(密鑰).
vi -C 檔案名稱,便會要求輸入密鑰,如正確,便開啟了.

littletiger的意思是不是這樣:
以HP-UX為例
1、加密
vi file
:X
(Are you sure?(y/n)[n]:)回答y
輸入密碼斷行符號以後再儲存,就加密成功了
2、解密
vi -C file 或者 vi -x file
在 Key: 後面輸入密碼進入file
:X
(Are you sure?(y/n)[n]:)回答y
直接斷行符號以後再用 wq 或者 wq! 儲存,就把file解密成功了

:set number
顯示行號

:g/$/s// ABC/g
:g/^/s//def /g
在文本每行的頭和尾添加字串.

用vi進行coding時的提示:
用ctags命令對目前的目錄下的c來源程式掃描,產生tags檔案
$ ctags *.c
這樣,在vi裡通過命令
:ta fun_name
就可以直接開啟函數fun_name所在的檔案,並將游標置於函數開頭

:n,n1 d
n和n1都是行數, d是刪除這些行 .表示當前的行。
: n
n是行數,直接轉到n行。
: r 檔案名稱
把檔案添加到當前的檔案中
:n,n1 w 檔案名稱
把從n行到n1行寫道另外一個檔案中

尋找:
在一個單詞上用*,就向下尋找此單詞,#是向上
用/尋找hello,就不會尋找到hello_world(用此替換也很好用)

替換:
如有一檔案,內容為:
aa
bb
cc
dd
用:%s/.*/printf("& is :%d
",&)/
檔案內容為變為:
printf("aa is :%d
",aa)
printf("bb is :%d
",bb)
printf("cc is :%d
",cc)
printf("dd is :%d
",dd)
&為尋找到的內容
用:~為重複上一次替換

用系統命令編輯:
如有一檔案,內容為:
333
222
334
444
111
553
554
233
運行命令:%!sort 檔案內容為:
111
222
233
333
334
444
553
554
用此方法可以使用許多系統命令進行編輯,大家可以靈活運用

其他特殊用法:
用q: 看一看有什麼
用? 可以編輯你用過的命令
程式中在一個調用函數(如:printf)上用K,可以直接調出printf的協助

ctrl+f向下翻頁,ctrl+b向上翻頁(對於telnet上去的時候比較有用)

1. vi中設定tab鍵的空格數:
:set ts=4
:set sw=4
將此兩句話加到目前使用者目錄的檔案.vimrc中,這樣目前使用者用vi的時候就會啟動該設定

2.拷貝:
將第2行到第9行的字copy到第11行
:2,9 co 10
將第2行到第9行的字move到第11行
:2,9 m 10

3.設定行號:
:se nu
取消行號:
:se nonu

4.當前行與下一行換位置:ddp

5.當前字與後面的字換位置:xp

用vi替換檔案中的字串

  在vi介面下使用命令
  :%s#/usr/bin#/bin#g
  可以把檔案中所有路徑/usr/bin換成/bin。也可以使用命令:
  :%s/usr/bin/bin/g
  其中“”是逸出字元,表明其後的“/”字元是具有實際意義的字元,不是分隔字元。

請問 vi 中的刪除緩衝區是怎麼回事?

看到有一個資料說到:
“vi還有有編號的刪除緩衝區。撤消命令只能恢複上一次的刪除,若且唯若這個刪除是最後一次操作。但是,vi可以把最近9次刪除的內容都放入9個編號從1到9的緩衝區內。最近一次刪除儲存在緩衝區1,次近的在緩衝區2,依此類推。例如,"2p可以放置第二個刪除緩衝區中的內容。”
但是我沒有操作成功,請教各位。

既然是vi的問題,我義不容辭

準備檔案test
1
2
3
4
5

將游標定位在5上,連按5次dd
然後鍵入
"5p
"4p
"3p
"2p
"1p
看看發生了什麼

明白了?

要注意"

謝謝你們的解釋!
再問,是否只有刪除的整行可以儲存在刪除緩衝區中?比如刪除的字元呢?

字元也可以,用整行只是為了讓你好學
自己試試吧,找葫蘆畫瓢吧

wo 我照呢說得作的 可是恢複的是5個1 啊 怎麼回事 (solaris8)

比如在一行中連按5次dw,會將5個詞依次放入1~5的寄存器中嗎?我沒有實驗成功,總提示寄存器為空白。

[這個貼子最後由goodboy在 2002/08/22 09:29am 編輯]

bjchenxu,能否把VI使用進階技巧的方法給大家講一講呀:)
很多的,比如:怎麼一個檔案中的幾行儲存到另外一個檔案中了,
或者把另外一個檔案的插入到指定內容的行後面了或者我在vi中拷貝
A檔案的某5行(Esc下5yy拷貝),然後再:e b檔案,怎麼把A檔案的5行拷過來?
然後又怎麼回到原先的A檔案中?

進階技巧太多太多,建議大家找本版valentine斑竹要書看,呵呵
你說的幾個問題我先回答一下:
1. 將一個檔案中的幾行儲存到另外一個檔案中了
1.1 $vi file1
1.2 :3,5 y a
1.3 :e file2
1.4 "ap

2. 將另外一個檔案插入到指定內容的行後面
2.1 $vi file1
2.2 :/regularexpress/ r file2

3. 兩個檔案的切換和拷貝
3.1 $vi file1 file2
3.2 :3,5 y a
3.3 :e#
3.4 "ap
3.5 :e#

在vim裡面查看man頁面

在進入vim後按“:”號,輸入
source $VIMRUNTIME/ftplugin/man.vim
然後再按“:”號,輸入
nmap K :Man
然後在vim裡面輸入你要的命令,在這個命令上按K,就可以看到經vim處理過後的man頁。

用vi在整個檔案的各行或某幾行的行首或行尾加一些字串

  $vi file
  :3,$s/^/some string 在檔案的第一行至最後一行的行首插入“some string”。
  :%s/$/some string/g 在整個檔案每一行的行尾添加“some string”。
  :%s/string1/string2/g 在整個檔案中替換“string1”成“string2”。
  :3,7s/string1/string2/ 僅替換檔案中的第3行到第7行中的“string1”成“string2”。
  注意: 其中s為substitute,%表示所有行,g表示global。

用vi刪除大段的內容

  首先利用編輯命令“vi file”開啟檔案, 然後將游標移到要刪除的行處按Ctrl+G顯示行
號,再到結尾處再按Ctrl+G,顯示檔案結尾的行號。
  例如:
  :23,1045d
  假定2次得到的行號為23和1045,則把這期間的內容全刪除, 也可以在要刪除的開始行和
結束行中用ma、mb命令標記,然後利用“:'a,'bd”命令刪除。

用vi實現“另存新檔”功能
  $vi file
  :w /tmp/1
  儲存所做的所有修改,也可以將其中的某一部分修改儲存到臨時檔案。
  如果僅僅把第20~59行之間的內容存檔成檔案/tmp/1,我們可以鍵入如下命令:
  :20,59w /tmp/1

用vi在一個新檔案中讀其他檔案的內容
  $vi file
  :r /etc/passwd 在開啟的檔案file中游標所在處讀入/etc/passwd
  :%s/:.*//g 刪除/etc/passwd中使用者名稱後面的從冒號開始直到行尾的所有部分。
  您也可以在指定的行號後讀入檔案內容,例如使用命令:
  :3r /etc/passwd
  從新檔案的第3行開始讀入 /etc/passwd的所有內容。
  我們還可以使用以下方法刪掉檔案中所有的空行及以#開始的注釋行。
  $cat squid.conf.default | grep -v '^$' | grep -v '^#'

用vi拷貝一個檔案中的文本並粘貼到另一個檔案中
  $vi file1 file2
  然後在vi介面下:
  yy <-在檔案1的游標處拷貝所在行
  :n <-切換到檔案2 (n=next)
  p <-在檔案2的游標所在處粘貼所拷貝的行
  :n <-切換迴文件1

使用vim對被編輯檔案加密
  在VIM當中要對所編輯的檔案進行簡單加密,可以在命令列模式下鍵入“:X”(無括弧,
只有冒號和X)然後在提示“Enter the encrypt key”時輸入口令字串就可以加密了。但是別
忘了要儲存哦!儲存的時候會發現在螢幕底部有“[crypted]”這樣的字樣。 下次開啟該加密
檔案會要求您輸入口令字串,這個總該記得的吧?

設定vim自動顯示行號
  在每個使用者的主目錄下,都有一個 vi 的設定檔".vimrc"或".exrc", 使用者可以編輯它,
使這些設定在每次啟動 vi 時,都有效。
  例如,加入如下設定行:
set nu 顯示行號
set nonu 不顯示行號
set ic 尋找時不考慮大小寫
set noic 尋找時考慮大小寫

在vi裡搜尋索引鍵

  當你用vi開啟一個檔案後,因為檔案太長,如何才能找到你所要尋找的關鍵字呢?在vi裡
可沒有菜單-〉尋找,不過沒關係,你在命令模式下敲斜杆(/)這時在狀態列(也就是螢幕左下
角)就出現了 “/”然後輸入你要尋找的關鍵字敲斷行符號就可以了。
  如果你要繼續尋找此關鍵字,敲字元n就可以繼續尋找了。值得注意的是“/”是向下尋找,
而“?”是向上尋找,而在鍵盤定義上“?”剛好是“/”的上檔符。

用彩色的vi寫程式

  修改$HOME中的.vimrc,把color值設為true
  把環境變數VIMRUNTIME設成vim的路徑名
  例:/usr/share/vim
  在vi中鍵入
  :syntax on斷行符號
  :so $VIMRUNTIME/syntax/java.vim斷行符號(現在版本的vi支援無數程式文法色彩檔,都在
syntax/下,看一眼吧:))
  如果不喜歡所用的xterm背景色,可以用xterm -bg LightBlue(或其他喜歡的顏色)啟動,
或者修改.Xresouce的xterm background項。
  vi -o xxx.java xxxx.java

vi

例如:Esc鍵在vi中輸入ctrl+v與Esc為^[
請問Delete鍵在vi中如何輸入?

d
空一行

[Ctrl+V][Del]

輸這個鍵有什麼用啊

輸不進去

我想在shll裡自動telnet到另一台機器終止.profile(自動運行了程式)執行,好執行我在shll中的一些命令。

輸不進去

這種情況是因為DEL在您的終端上被定義成某個中斷鍵,中斷是被作業系統優先處理的。
使用stty -a 可以顯示出DEL被哪個中斷所用。
以下是兩種解決方案:
1。使用“stty 中斷名 新的中斷鍵”形式改變中斷鍵設定,然後調用vi,再使用ctrl+V的方法。如:stty intr ^E;vi
2。使用一個shell指令碼myvi:stty raw ;vi $*;stty -raw
調用myvi
還有一種變通的解決方案,DEL鍵的ascii碼應該是^?,0x7f,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.