天天看點

【Linux】Linux中Vim基礎

word轉成html再搞到csdn這塊,效果不是很好,表格每行顯示太高........囧

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

vim指令訓練稿

目錄

1.打開檔案操作...1

2.存儲及退出檔案...2

3.模式轉換...2

4.光标移動...3

5.插入...4

6.删除...4

7.複制和黏貼...5

8.查找...5

9.替換...6

10.編輯多個檔案...6

11.其他指令...6

12分屏操作...7

13 vim的幫助指令...9

14.七個習慣

vi

進入vi而不讀入任何檔案

vi filename

進入vi并讀入指定名稱的檔案

vi filename....filename

打開多個檔案,依次進行編輯

vi +n filename

進入vi并且由檔案的第幾行開始。

vi + filename

進入vi并且由檔案的最後一行開始。

vi +/pattern filename

打開檔案,并将光标置于第一個與pattern比對的串處

vi -r filename

在上次正用vi編輯時發生系統崩潰,恢複filename

vim -r file

隻讀方式打開檔案

vimdiff filea fileb

比較編輯兩個不同的檔案

儲存

:wq 或者 :x

存檔案,并且退出vi

zz

儲存并退出 (:x 表示僅在需要時儲存,zz不需要輸入冒号并回車) zz = wq

:w

儲存目前檔案

:w filename

寫入指定檔案,相當于另存為,但未退出vi(若未指定檔案名則為目前工作的檔案名)

可帶行範圍  :n1,n2 w filename

:w /tmp/1

既然沒法存盤,不想放棄所做的所有修改,先臨時存到/tmp/1

:saveas <path/to/file>

另存為 <path/to/file>

退出

:q

不作任何修改并退出vi (多屏時用qa)

:q!

放棄任何修改并退出vi

zq

無條件退出

編輯

:e filename

打開檔案filename進行編輯[相當于退出目前的并打開另一個檔案]

:e!

放棄修改檔案内容,重新載入該檔案編輯

:e

重新載入【類似重新整理】

:w !sudo tee %

以普通使用者身份打開的vim,修改後以root身份儲存

其他

ctrl + z  /    fg

暫時挂到背景/跳回編輯頁面

:f 或 ctrl-g  

顯示檔案名,目前光标所在行的行号,總的行數,以及目前行所在檔案中的百分比和目前光标所在的列的資訊

:!command

暫時退出vi并執行shell指令,執行完畢後再回到vi

:r!command

将指令command的輸出結果放到目前行【強大】

:sh

暫時退出vi到系統下,結束時按ctrl + d則回到vi。

vim -x exam.txt

新編輯的檔案加密,會提示輸入密碼

:x

檔案加密,會提示輸入密碼

:map

列出目前已定義的映射

(如何定義映射?)

:jumps

列出關于你曾經跳轉過的位置的清單,你最後一個跳轉的位置被特别以一個”>”号标記

:marks

列出自定義的标記,包含vim内部自定義的辨別

:%!nl<code></code>

要對包含空行的所有行進行編号(所有行之前插入行号^i)

:version

顯示vim版本資訊,包含特性、編譯方式及配置檔案目錄

:n1,n2 w ! command

将檔案中n1行至n2行的内容作為command的輸入并執行之,若不指定n1,n2,則表示将整個檔案内容作為command的輸入【注意空格】例如  :1,4 w! grep tom

:options

打開一個新視窗, 在該視窗的最開頭的注釋下面是一個選項清單(do what?)

:r filename

在光标所在處插入一個檔案的内容(read)

可加入數字 :nr filename

:f filename

改變編輯中的檔案名(file)

相當于複制了一個檔案,執行這個指令後,新編輯不會應用于原檔案

gf

vim特殊打開檔案的方法,打開光标所在處的 word 為名的檔案,當然,這個檔案要在目前目錄内,否則會建立新檔案

1)指令行模式(command mode)

控制螢幕光标的移動,字元、字或行的删除,移動複制某區段及進入insert mode下,或者到 last line mode

a i o進入插入模式

:進入底行模式

    2)插入模式(insert mode)&lt;i/a/o/o&gt; insert  2insert

隻有在insert mode下,才可以做文字輸入

按「esc」鍵可回到指令行模式。

    3)底行模式(last line mode)normal模式

将檔案儲存或退出vi,也可以設定編輯環境,如尋找字元串、列出行号……等,使用指令執行編輯操作等

可縮寫(:setà:se)補齊(tab鍵的功效+ctrl-d)  曆史記錄(借助ctrl-up)

/ (查找)    ?(反查)

4)     visual模式&lt;v / v / ctrl-v /r&gt;

字元 預設1,可加n

h

光标左移一個字元[回退鍵backspace]

l

光标右移一個字元[空格鍵space]

bp:

hkjl作為移動光标【important,同方向鍵,建議使用這四個】

單詞  預設1,可加n

w

光标跳到下個word的第一個字母 [常用]

移到下一個字的開頭,忽略标點符号

b

光标回到上個word的第一個字母

移到前一個字的開頭,忽略标點符号 back

e

光标跳到下個word的最後一個字母

移到下一個字的結尾,忽略标點符号 end

移到目前一行的開始[home]

數字零,到行頭

$

移到目前一行的最後[end]

^

指令将光标移動到目前行的第一個非空白字元上

g_ 

到本行最後一個不是blank字元的位置

k

光标上移一行ctrl+p

j

光标下移一行ctrl+n

enter

光标下移一行

n+

光标下移n行【按上檔鍵 數字shift +】

n-

光标上移n行

g

移到檔案的最後一行

ng或者:n

移到檔案的第n行

gg

移動到文檔的開始

[[

檔案開始位置——開始行

]]

檔案結束位置——末尾行

光标移至螢幕頂行    head

光标定位在顯示屏的第一行

m

移到螢幕的中間行開頭 middle

光标定位在顯示屏的中間

移到螢幕的最後一行 last

光标定位在顯示屏的最後一行

(

光标移至句首

)

光标移至句尾

段落

{

移到段落的開頭

}

移到下一個段落的開頭

%

比對括号移動,包括 (, {, [.(陳皓注:你需要把光标先移到括号上)

跳轉到與之比對的括号處

* 和 #

 比對光标目前所在的單詞,移動光标到下一個(或上一個)比對單詞(*是下一個,#是上一個)

zf

折疊(需加方向鍵)

zo

展開(空格也可以展開)

可以zf進行折疊, 用zo打開折疊,也可以方向鍵向右打開折疊,zc 關閉折疊(隻要在被折疊的塊中的任一個語句就行)???

螢幕

ctrl+u

向檔案首翻半屏up

ctrl+d

向檔案尾翻半屏down

ctrl+f

向檔案尾翻一屏 forward (fact整屏去兩行)

ctrl+b

向檔案首翻一屏back (fact整屏去兩行)

ctrl-]

跳轉到目前光标所在單詞對應的主題

ctrl-o

回到前一個位置

指令會把目前行置為螢幕正中央(z字取其象形意義模拟一張紙的折疊及變形位置重置)

zt

指令會把目前行置于螢幕頂端(top)

zb

指令會把目前行置于螢幕底端(bottom)

50%

光标定位在檔案的中間

`

跳轉到最近光标定位的位置(隻能記憶最近兩個位置) 反引号

i

在光标前開始插入字元  insert

在目前行首開始插入字元

a

在光标位置後開始加字  append

在光标所在行的最後面開始加字

o

在光标下加一空白行并開始加字 open

在光标上加一空白行并開始加字

r

替換目前字元

替換目前字元及其後的字元【目前及其後字元被覆寫】

s

預設删除光标所在字元,輸入内容插入之

= xi

預設删除目前行内容,輸入内容作為目前行新内容= dd+o

字元

nx

删除由光标位置起始後的n個字元(含光标位置)

x =dl(删除目前光标下的字元)

删除由光标位置起始前的n個字元(含光标位置)

x =dh(删除目前光标左邊的字元)

d0

删至行首

d$

删至行尾

dfa

表示删除從目前光标到光标後面的第一個a字元之間的内容

d

代表d$(删除到行尾的内容)

c

代表c$(修改到行尾的内容)

單詞

ndw

删除光标處開始及其後的n-1個字

ndb

删除光标處開始及其前的n-1個字

diw

删除目前光标所在的word(不包括空白字元),意為delete inner word 兩個符号之間的單詞

daw

删除目前光标所在的word(包括空白字元),意為delete a word

ndd

删除目前行及其後n-1行

:n1,n2 d

将 n1行到n2行之間的内容删除

dg

删除目前行至檔案尾的内容

dgg

删除目前行至檔案頭的内容

d回車

删除2行【包括光标一行】

【删除就是剪切,它會覆寫之前複制的内容】

删除并進入輸入模式

cw

删除目前字,并進入輸入模式

【很好用,快速更改一個單詞】

相當于dw+i

ncw

删除目前字及其後的n-1個字,并進入輸入模式\

修改指定數目的字

cc

删除目前行,并進入輸入模式

ncc

删除目前行及其後的n-1行,并進入輸入模式

guw

光标下的單詞變為小寫

光标下的單詞變為大寫

xp

左右交換光标處兩字元的位置

ga

顯示光标下的字元在目前使用的encoding下的内碼

複制

nyl           

複制n個字元(也可nyh)

yw

複制一個單詞

y0

表示拷貝從目前光标到光标所在行首的内容

y$

複制從目前位置到行尾

yfa

表示拷貝從目前光标到光标後面的第一個a字元之間的内容

yg

複制從所在行到最後一行

nyy

将光标所在位置開始的n行資料複制暫存

複制一整行

ctrl + v   方向  y

複制選擇的很多行:先使用v進入visual模式,然後j向下移動到你想複制的行為止,然後y

黏貼

p

複制暫存資料在光标的下一行

複制暫存資料在光标的上一行

:n1,n2 co n3

将n1行到n2行之間的内容拷貝到第n3+1行【n3行的下一行】

:n1,n2 m n3

将n1行到n2行之間的内容移至到第n3行下

把下一行的資料連接配接到本行之後

多一空格

~

改變目前光标下字元的大小寫

/pattern

從光标開始處向檔案尾搜尋pattern

?pattern

從光标開始處向檔案首搜尋pattern

n

在同一方向重複上一次搜尋指令

在反方向上重複上一次搜尋指令

#

向上完整比對光标下的單詞

相當于?word

*

向下完整比對光标下的單詞

相當于/word

查找對應的( [ {比對

nfx

在目前行查找光标後第n個x(一般直接fx)

:s/p1/p2/g

将目前行中所有p1均用p2替代

無g,則隻替換第一個

:s/p1/p2/c

查找替換要求确認

:n1,n2s/p1/p2/g

将第n1至n2行中所有p1均用p2替代

:%s/p1/p2/g

全局,使用p2替換p1

:%s/p1/p2/gc

替換前詢問

:n,$s/vivian/sky/

替換第n行開始到最後一行中每一行的第一個vivian為sky,n為數字

:.,$s/vivian/sky/g

替換目前行開始到最後一行中每一行所有vivian為sky

:s/vivian\//sky\//

替換目前行第一個vivian/為sky/,可以使用\作為轉義符

:1,$s/^/some string/

在檔案的第一行至最後一行的行首前插入some string

:%s/$/some string/g

在整個檔案每一行的行尾添加some string

:%s/\s\+$//

去掉所有的行尾空格,“\s”表示空白字元(空格和制表符),“\+”對前面的字元比對一次或多次(越多越好),“$”比對行尾(使用“\$”表示單純的“$”字元)

:%s/\(\s*\n\)\+/\r/

去掉所有的空白行,“\(”和“\)”對表達式進行分組,使其被視作一個不可分割的整體

:%s!\s*//.*!!

去掉所有的“//”注釋

:%s!\s*/\*\_.\{-}\*/\s*!!g

去掉所有的“/* */”注釋

:%s= *$==

将所有行尾多餘的空格删除(沒看懂)

:g/^\s*$/d

将所有不包含字元(空格也不包含)的空行删除

替換目前字元及其後的字元,直至按esc鍵

指令說明:

:[range]s/pattern/string/[c,e,g,i]

•   range 指的是範圍,1,7指從第一行至第七行,1,$ 指從第一行 至最後一行,也就是整篇文章,也可以% 代表 (目前編輯的文章)。

•   pattern 就是要被替換掉的字串,可以用regexp 來表示。

•   string:   將pattern 由 string 所取代。

•   c: confirm,每次替換前會詢問。

•   e: 不顯示error。

•   g: globe,不詢問,整行替換。

•    i: ignore 不分大小寫。

•   g 大概都是要加的,否則隻會替換每一行的第一個符合字串。

•   可以合起來用

其中s為substitute,%表示所有行,g表示globa

将指定檔案的内容讀入光标所在行下

:args

顯示編輯名單中的各個檔案名清單

:n

切換到下一個檔案

切換到上一個檔案

:rew

回到首個檔案

:e#

讀入編輯名單内的前一個檔案

:e file

讀入另一個檔案進vi(此檔案可不在編輯名單内),若原檔案經修改還沒有存檔,則應先以: w 存檔。

:e! file

強迫讀入另一個檔案進入vi,原檔案不作存檔動作。

放棄目前一切修改,重新載入檔案

<code>:bn</code> 和 <code>:bp</code> 

你可以同時打開很多檔案,使用這兩個指令來切換下一個或上一個檔案

:files或 :buffers或 :ls

會列出目前 buffer 中的所有檔案

.

重複前一指令

u

取消前一指令undo

:u也行,一般不用,操作太多

ctrl + r

恢複【隻對u有效】redo

ctrl + l

重新整理螢幕顯示

ctrl+v

然後 ctrl+a是^a

    ctrl+i是\t

輸入特殊字元

然後用j、k、l、h或方向鍵上下選中多列,之後 i i   a a  r  x等,最後按esc,生效

vim列操作

v

進入visual模式【esc】退出

多行選中模式



【set可以簡寫為se】

附錄:set的所有選項

all

列出所有選項設定情況

常用

:se number

簡寫 :se nonum

顯示檔案的行号 

簡寫:se nu  se nonu

:se list

顯示制表位(ctrl+i)和行尾标志($)  se nolist

:se wrap

将超出螢幕行分多行顯示 se nowrap

打開/關閉換行

:se paste

vim貼代碼的時候,格式亂掉

先之後,黏貼,就不會亂掉

:set ignorecase

設定在搜尋中忽略大小寫

:set hlsearch

高亮顯示搜尋結果 

:nohls

可以取消高亮

term

設定終端類型

report

顯示由面向行的指令修改過的數目

terse

顯示簡短的警告資訊

warn

在轉到别的檔案時若沒儲存目前檔案則顯示no write資訊

nomagic

允許在搜尋模式中,使用前面不帶“\”的特殊字元

nowrapscan

禁止vi在搜尋到達檔案兩端時,又從另一端開始

mesg

允許vi顯示其他使用者用write寫到自己終端上的資訊

:set autowrite

設定自動存盤

:set backup

設定備份

:set backupext=.bak

設定備份檔案名後辍,預設原檔案名~

:syntax enable

打開彩色

:set autoindent

讓vim在開始一個新行時對該行施以上一行的縮進方式

:set showcmd

在vim視窗的右下角顯示一個完整的指令已經完成的部分

:set key=

去掉檔案加密

:set ai

設定每行起始位置(以光标目前位置為起始)

:set noai

取消行起始位置設定

:set incsearch

鍵入目标字元串的過程中vim就同時開始了搜尋工作

:set ts=4

:set expandtab

一個tab自動轉換成4個空格

分屏啟動vim

vim -on file1 file2 ...

使用大寫的o參數來垂直分屏

使用小寫的o參數來水準分屏。

注釋: n是數字,表示分成幾個屏【隻會出現n屏,後面跟多了檔案不會顯示】

使用vim的幫助 :help split

分屏

ctrl+w s

上下分割目前打開的檔案

ctrl+w v

左右分割目前打開的檔案

:sp filename

上下分割,并打開一個新的檔案

:vsp filename

左右分割,并打開一個新的檔案

關閉分屏

ctrl+w c

關閉目前視窗【關閉不了最後一個】

ctrl+w q

關閉目前視窗,如果隻剩最後一個了,則退出vim

:qa

退出vim,并關閉所有屏

:wqa

儲存所有分屏并關閉

移動光标

ctrl+w l

把光标移到右邊的屏

ctrl+w h

把光标移到左邊的屏中

ctrl+w k

把光标移到上邊的屏中

ctrl+w j

把光标移到下邊的屏中

ctrl+w w

把光标移到下一個的屏中

要在各個屏間切換,隻需要先按一下ctrl+w 

&lt;c-w&gt;&lt;dir&gt; : dir就是方向,可以是 hjkl 或是 ←↓↑→中的一個,其用來切換分屏

移動分屏

向右移動

向左移動

向上移動 

向下移動 

這個功能還是使用了vim的光标鍵,隻不過都是大寫。當然了,如果你的分屏很亂很複雜的話,這個功能可能會出現一些非常奇怪的症狀。

螢幕尺寸

下面是改變尺寸的一些操作,主要是高度,對于寬度你可以使用ctrl+w &lt;或是&gt;,但這可能需要最新的版本才支援

當同時打開幾個檔案時,按 _ 使目前視窗最大化

ctrl+w =

讓所有的屏都有一樣的高度

ctrl+w +【shift +=鍵】

增加高度

&lt;c-w&gt;+ (或 &lt;c-w&gt;-)  增加尺寸

擴大視窗

ctrl+w -【shift –鍵】

減少高度

縮小視窗

&lt;c-w&gt;_ (或 &lt;c-w&gt;|)

最大化尺寸 (&lt;c-w&gt;| 垂直分屏)

關閉分割視窗可以用:close 其實用:q也行

vim擁有一個細緻全面的線上幫助系統,進入幫助

啟動幫助

&lt;help&gt;鍵 (如果鍵盤上有的話)

&lt;f1&gt;鍵(如果鍵盤上有的話)

:help&lt;回車&gt;

:help command&lt;回車&gt;

   例如:help w &lt;回車&gt;

        :help insert-index &lt;回車&gt;

退出幫助

:q &lt;回車&gt;

【Linux】Linux中Vim基礎
【Linux】Linux中Vim基礎

•      快速移動

•      不要兩次鍵入同樣的東西

•      錯誤修複

•      經常需要編輯不止一個檔案

•      協同作業

•      文本是結構化的

•      養成習慣

1. 快速移動

在文本中随意漫遊是非常常見的操作。是以高效編輯的第一要義是學習如何能夠在文本中快速移動,準确定位。有三個步驟可以使你學到你需要的技巧:

當你編輯檔案的時侯,留意一下你經常要重複進行的操作是什麼;

練習使用這些指令,直到你的手指可以不假思索地運用自如;

浏覽一下參考手冊你就會發現關于tag的主題。文檔會告訴你如何使用這一功能跳轉到函數的定義處。

2. 不要兩次鍵入同樣的東西

借助":s"替換指令或者"."重複指令等快捷操作代替重複操作。

3. 錯誤修複

縮寫功能來糾正。一些例子是::abbr lnuix linux。

文法高亮機制。

4. 經常需要編輯不止一個檔案

建立tag檔案。

将光标定位在你要檢視其原型的函數名上,然後按下"[i"指令, vim将會顯示include檔案中比對這個函數名的一個清單。

預覽标簽機制會打開一個特殊的預覽視窗,并且使光标仍然停留在你目前所在的位置,在預覽視窗中的文本列出了目前光标所在處的函數的聲明(有些可能不是聲明)将目前光标移動到另一個函數名上, 停留幾秒鐘, 預覽視窗中的内容就會變成是關于新函數名的聲明。

5. 協同作業

unix的哲學是使用獨立的小程式,每個小程式做一項專門的任務,并且把它作好,将它們的工作整合到一起來完成一個複雜的任務。

vim的做法是将一些分散的小程式整合起來,産生強大的處理能力,在這方面vim還有待在将來進一步提高。

在編輯器領域, emacs是這方面的一個典範(有人甚至說它是一個能編輯文本的作業系統)

6.文本是結構化的

加速你的編輯-編譯-修改的周期。

":make" 指令編譯程式項目,捕獲編譯的錯誤/警告并允許你直接跳轉到引起這一錯誤/警告的程式行上去;

`errorformat'選項告訴vim你的編譯器将生成何種格式的錯誤資訊,以便于它能識别;

寫一些自定義的宏,如要跳轉到manual 幫助文檔, 這對于檢視交叉索引是一種簡捷有效的辦法;

使用上面的三項原則可以對付任何形式的結構化文本。

7. 養成習慣

絕大多數人隻需要學習其中的10-20%的指令就足以應付它們的工作了。

建立适合自己的指令集,不時地回顧以往所做的事, 看看是不是可以自動完成一些重複的工作。

不斷地重複練習你的解決方案直到你的手指可以條件反射地自動完成,進而達到你所期望的境界。

不要一次嘗試太多的東西,一次做一件事并多做幾次會好得多。

對于不經常的操作,最好記下你的處理步驟以備将來不時之需。

不管怎樣,隻要目标明确。你就能找到讓你的編輯變得更加高效的辦法。