vi快捷鍵必知必會

先補充幾個linux命令終端界面的快捷鍵


ctrl+a:移動光標到命令行首

ctrl+e:移動光標到命令行尾

ctrl+z:將進程放入後臺

              使用bg或者fg命令可以將其調出來

不過,由Ctrl + z轉入後臺運行的進程在當前用戶退出後就會終止,所以用這個不如用nohup命令,或者&,

因爲nohup命令的作用就是用戶退出之後進程仍然繼續運行,而現在許多腳本和命令都要求在root退出時仍然有效。


ctrl + c: 終止命令

ctrl + d: 退出shell,logout


ctrl + l: 清除屏幕內容,效果等同於clear

ctrl + y: 粘貼剛纔所刪除的字符

           此命令比較強悍,刪除的字符有可能是幾個字符串,但極有可能是一行命令。

ctrl + r :在歷史命令中查找 (這個非常好用,輸入關鍵字就調出以前的命令了)

          這個命令我強烈推薦,有時history比較多時,想找一個比較複雜的,直接在這裏,shell會自動查找並調用,方便極了


ctrl+p:顯示上一條命令,↑

ctrl+n: 顯示下一條命令,↓


!! 重複執行最後一條命令

!$ 顯示系統最近的一條參數

比如我先用cat /etc/sysconfig/network-scripts/ifconfig-eth0,然後我想用vim編輯。

一般的做法是先用↑ 顯示最後一條命令,然後用Home移動到命令最前,刪除cat,然後再輸入vim命令。

其實完全可以用vim !$來代替。

ctrl+alt+F1~F7:切換終端

 

把當前進程送到後臺處理。


------------------------------------開始VI---------------------------------------

i:向光標處插入

a:向光標處右移一個字符插入

o:向光標處下移一行插入

x:刪除當前光標一個字符

X:刪除當前光標左面一個字符

----------------------------

dd:刪除當前光標所在的一行數據

yy:複製光標所在的行數據

p:在當前光標的下一行粘貼數據

P:在當前光標的上一行粘貼數據

---------------------------------

0:按零,移動到當前行的行首(當前屏幕範圍內)

shift+$:移動到當前行的行尾(當前屏幕範圍內)

ctrl+( :光標移動到當前段的行首

ctrl+) :光標移動到當前段的行尾

shift+h :光標移動到文檔首端(當前屏幕範圍內)

shift+g :光標移動到文檔末端(整篇文檔)

-------------------------------------

ctrl+v :進入列塊可視化操作模式(這是vim的命令。root用戶下的vi無此操作,普通用戶下的vi有此操作)

  進入該模式後,可以進行列塊操作

  如:註釋很多列

   首先ctrl+v

   然後使用shift+g選擇一列數據,或者用 "j" 或者用 "箭頭"來選擇需要的列

   再後shift+i

   在當前光標下敲入#

   Esc

   發現剛纔選定的行都被註釋掉了。

  解除註釋:

    首先ctrl+v

    然後shift+h選定剛纔被註釋掉的行

    敲入x

    發現註釋全部解除了。

-------------------------------------------------------------

改變大小寫:

大寫變小寫

ctrl+v,然後移動L鍵選中要改變大寫爲小寫的字段,按小u鍵即可

小寫變大寫

ctrl+v,然後移動L鍵選中要改變小寫爲大寫的字段,按大U鍵即可

--------------------------------------------------

ctrl+z:將當前vi打開文件放到後臺

fg:將剛放入後臺的文件調出來

--------------------------

vi開一個文件A後

:vs /path/另一個文件B---------------打開對比窗口

ctrl+w:切換兩個窗口。

注:此操作是vim操作,root下vi不帶vim,普通用戶可以。

 

---------------------------------------------------------

/

:查找

回車後按n鍵查找下一個

--------

:set nu    :打開序號

:1000      :將光標移到第1000行

-----------------------

用vi查看文件編碼

vi tb1.txt
:set fileencoding
        fileencoding=latin1

--------------------------------------------------

:%s#待替換的字符#替換後的字符#g

   %爲通配,替換所有。

\ :反斜槓-用來轉義特殊字符。

eg:0 1/2\3^4567890

1、去掉空格

:s# ##g ---------空格可以不用轉義

2、將/替換成|

:s#\/#|#g

3、將\替換成|

:s#\\#|#g

 

:g/^\s*$/d                      ----------刪除只有空白的行
 
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1  ----------將 data1 data2 修改爲 data2 data1
 
:%s/\(\w\+\), \(\w\+\)/\2 \1/   ----------將 Doe, John 修改爲 John Doe
 
:%s/\<id\>/\=line(".")          ----------將各行的 id 字符串替換爲行號
 
:%s/\(^\<\w\+\>\)/\=(line(".")-10) .".". submatch(1)   
     將每行開頭的單詞替換爲(行號-10).單詞的格式,如第11行的word替換成1. word
 
:/OB/+1,$!sort                  ----------排序

 

-----------------------------------

 

more時用v進入vi

-------------------------------------------------------------------------------------------

轉:

元字符 說明
. 匹配任意一個字符
[abc] 匹配方括號中的任意一個字符。可以使用-表示字符範圍,
      如[a-z0-9]匹配小寫字母和阿拉伯數字。
[^abc] 在方括號內開頭使用^符號,表示匹配除方括號中字符之外的任意字符。
\d 匹配阿拉伯數字,等同於[0-9]。
\D 匹配阿拉伯數字之外的任意字符,等同於[^0-9]。
\x 匹配十六進制數字,等同於[0-9A-Fa-f]。
\X 匹配十六進制數字,等同於[^0-9A-Fa-f]。
\w 匹配單詞字母,等同於[0-9A-Za-z_]。
\W 匹配單詞字母之外的任意字符,等同於[^0-9A-Za-z_]。
\t 匹配<TAB>字符。
\s 匹配空白字符,等同於[ \t]。
\S 匹配非空白字符,等同於[^ \t]。
\a 所有的字母字符. 等同於[a-zA-Z]
\l 小寫字母 [a-z]
\L 非小寫字母 [^a-z]
\u 大寫字母 [A-Z]
\U 非大寫字母 [^A-Z]
 
表示數量的元字符
元字符 說明
* 匹配0-任意個
\+ 匹配1-任意個
\? 匹配0-1個
\{n,m} 匹配n-m個
\{n} 匹配n個
\{n,} 匹配n-任意個
\{,m} 匹配0-m個
\_. 匹配包含換行在內的所有字符
\{-} 表示前一個字符可出現零次或多次,但在整個正則表達式可以匹配成功的前提下,匹配的字符數越少越好
\= 匹配一個可有可無的項
\_s 匹配空格或斷行
\_[]
 
元字符 說明
\* 匹配 * 字符。
\. 匹配 . 字符。
\/ 匹配 / 字符。
\\ 匹配 \ 字符。
\[ 匹配 [ 字符。
 
表示位置的符號
元字符 說明
$ 匹配行尾
^ 匹配行首
\< 匹配單詞詞首
\> 匹配單詞詞尾
 
替換變量
在正規表達式中使用 \( 和 \) 符號括起正規表達式,即可在後面使用\1、\2等變量來訪問 \( 和 \) 中的內容。
 
懶惰模式
\{-n,m} 與\{n,m}一樣,儘可能少次數地重複
\{-} 匹配它前面的項一次或0次, 儘可能地少
\| "或"操作符
\& 並列
 
 
函數式
:s/替換字符串/\=函數式
在函數式中可以使用 submatch(1)、submatch(2) 等來引用 \1、\2 等的內容,而submatch(0)可以引用匹配的整個內容。
 
與Perl正則表達式的區別 ?
元字符的區別
Vim語法 Perl語法 含義
\+       +       1-任意個
\?       ?       0-1
\{n,m}   {n,m}   n-m
\(和\)   (和)    分組
 
例如:
1,去掉所有的行尾空格:
“:%s/\s\+$//”。“%”表示在整個文件範圍內進行替換,“\s”表示空白字符(空格和製表符),“\+”對前面的字符匹配一次或多次(越多越好),“___FCKpd___0rdquo;匹配行尾(使用“\___FCKpd___0rdquo;表示單純的“___FCKpd___0rdquo;字符);被替換的內容爲空;由於一行最多隻需替換一次,不需要特殊標誌。這個還是比較簡單的。(/<Space><Tab>)
 
2,去掉所有的空白行:
“:%s/\(\s*\n\)\+/\r/”。
這回多了“\(”、“\)”、“\n”、“\r”和 “*”。“*”代表對前面的字符(此處爲“\s”)匹配零次或多次(越多越好;使用“\*”表示單純的“*”字符),“\n”代表換行符,“\r”代表回車符,“\(”和“\)”對表達式進行分組,使其被視作一個不可分割的整體。因此,這個表達式的完整意義是,把連續的換行符(包含換行符前面可能有的連續空白字符)替換成爲一個單個的換行符。唯一很特殊的地方是,在模式中使用的是“\n”,而被替換的內容中卻不能使用“\n”,而只能使用“\r”。原因是歷史造成的,詳情如果有興趣的話可以查看“:help NL-used-for-Nul”。
 
3,去掉所有的“//”註釋:
“:%s!\ s*//.*!!”。首先可以注意到,這兒分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不換用其他分隔符的話就得在每次使用“/”字符本身時寫成“\/”,上面的命令得寫成“:%s/\s*\/\/.*//”,可讀性較低。命令本身倒是相當簡單,用過正則表達式的人估計都知道“.”匹配表示除換行符之外的任何字符吧。
 
4,去掉所有的“”註釋:
“:%s!\s*/\*\_.\{-}\*/\s*! !g”。這個略有點複雜了,用到了幾個不太常用的 Vim 正則表達式特性。“\_.”匹配包含換行在內的所有字符;“\{-}”表示前一個字符可出現零次或多次,但在整個正則表達式可以匹配成功的前提下,匹配的字符數越少越好;標誌“g”表示一行裏可以匹配和替換多次。替換的結果是個空格的目的是保證像“intmain()”這樣的表達式在替換之後仍然是合法的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章