天天看點

常用的linux指令-vim

vim filename

插入模式

esc

退出儲存

:w [filename]輸入 「w filename」将文章以指定的檔案名filename儲存

:wq儲存退出

:q!不儲存退出

:x儲存退出

zz退出儲存

:e!不儲存并載入該檔案

指令模式

i進入插入模式,從光标前一個位置開始輸入檔案;

a進入插入模式,從光标後面一個位置開始輸入檔案;

o插入新的一行,從行首開始輸入文字

移動光标

h/j/k/l「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格

在 vi 中連接配接行

J  将下一行連接配接到目前行的末尾

nJ  連接配接後面 n 行

光标放置與螢幕調整

H  将光标移動到螢幕的頂行

nH  将光标移動到螢幕頂行下的第 n 行

M  将光标移動到螢幕的中間

L  将光标移動到螢幕的底行

nL  将光标移動到螢幕底行上的第 n 行

ctrl+y 将螢幕下滾一行

ctrl+u 将螢幕上滾半頁

ctrl+d 将螢幕下滾半頁

ctrl+b 将螢幕上滾一頁

ctrl+f 将螢幕下滾一頁

ctrl+l 重繪螢幕

z-return 将目前行置為螢幕的頂行

nz-return 将目前行下的第 n 行置為螢幕的頂行

z.  将目前行置為螢幕的中央

nz.  将目前行上的第 n 行置為螢幕的中央

z-  将目前行置為螢幕的底行

nz-  将目前行上的第 n 行置為螢幕的底行

0數字「0」:移到文章的開頭

G「G」:移動到文章的最後。

$$」:移動到光标所在行的“行尾”

^「^」:移動到光标所在行的“行首”

w「w」:光标跳到下個字的開頭

e「e」:光标跳到下個字的字尾

b「b」:光标回到上個字的開頭

#l「#l」:光标移到該行的第#個位置,如:5l,56l

:#「#」号表示一個數字,在冒号後輸入一個數字,再按Enter鍵就會跳到該行了,如輸入數字15,再回車,就會跳到文章的第15行。

:set num顯示行号

:set nonum取消行号

删除文字

x每按一次,删除光标所在位置的“後面”一個字元

#x例如,「6x」表示删除光标所在位置的“後面”6個字元

X大寫的X,每按一次,删除光标所在位置的“前面”一個字元

#X例如,「20X」表示删除光标所在位置的“前面”20個字元

dd删除光标所在行(實際上是剪切)

#dd從光标所在行開始删除#行(實際上是剪切)

dw删除單詞(包括其後空格)(需要将光标定位于單詞開頭)(實際上是剪切)

dw 剪切單詞(不包括其後空格).

複制

yw将光标所在之處字元

#yw複制#個字到緩沖區

yy複制光标所在行到緩沖區。

y$複制光标所在位置到行尾

y^複制光标所在位置到行首

#yy「6yy」表示拷貝從光标所在的該行“往下數”6行文字

p将緩沖區内的字元貼到光标所在位置。注意:所有與“y”有關的複制指令都必須與“p”配合才能完成複制與粘貼功能

yw 複制一個單詞(包括空格)

ye 複制一個單詞(不包括空格)

Y 複制一整行(包括行尾換行符),不同于D删除到行尾(不包括換行符)

在插入模式下直接粘貼,剪貼闆上的每個字元都相當于手動輸入,再加上vim的自動縮進,是以縮進就會累積,如果vim還支援自動連續注釋,每行代碼都自動加上了注釋,解決辦法: 在粘貼前先設定進入粘貼插入模式,即不會自動縮進和連續注釋,運作指令:set paste

然後執行粘貼操作.但是在粘貼插入模式下代碼是不會自動按格式縮進的,需要使用nopaste設定回來:set nopaste.

也可以在.vimrc中設定切換的快捷鍵,比如設定F9,則可以在.vimrc中加入:set pastetoggle=<F9>

這樣直接在插入模式按F9就會在”-- 插入 --”模式和”-- 插入(粘貼) --”模式中切換

指令行模式下輸入”6,9 co 12”,複制6,9行到12行

指令行模式下輸入”6,9 m 12”,剪切6,9行到12行.

在6行做标記ma,移動光标到目前行,輸入y'a會複制目前行到标記a之間的文本.輸入d'a會删除a行到目前行.

單行删除:1(待删除行)d

多行删除:1,10d

光标移到起始行,輸入ma; 光标移到結束行,輸入mb; 光标移到粘貼行,輸入mc; 輸入:'a,'b co 'c 把 co 改成 m 就成剪切了.

删除多行的:5, 9 de

<a href="http://blog.163.com/ccbobo_cat/blog/static/3209946220090851034518/" target="_blank">替換(substitute)</a>

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

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

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

string將 pattern 由 string 所取代.

c confirm,每次替換前會詢問.

e 不顯示 error.

g globe,不詢問,整行替換,如果沒有這一項,隻會替換每行的第一個

. 點号表示在目前行查找(這是預設的range).

iignore 不分大小寫.

:nohl可以取消高亮

[實例] :%s/Edwin/Edward/g

這樣整篇文章的 Edwin 就會替換成 Edward.

注意: [c,e,g,i] 這幾個可以合起來用,如cgi 表示不分大小寫,整行替換,替換前要詢問是否替換

替換指令

r「r」:替換光标所在處的字元,替換完之後還是指令模式

R「R」:替換光标所到之處的字元,直到按下「ESC」鍵為止。

替換的應用之多行注釋:

:20,30 s/^/\/\//g 第20到30行用//注釋掉,如果加是gc,則替換每個時都要提示

:.,30 s/^/#/g 目前行(.表示目前行)到30行注釋掉,如果沒有g,則替換第一個

:20,30 s/^\/\///g 取消注釋,如果最後不是沒有g,隻有c,提示且隻會替換第一個

:4,10 s/^[^s]\+// 去掉行首的空白字元

replace with to (y/n/a/q/l/^E/^Y) ,輸入y表示替換目前這個,n表示這個不要替換,a表示全部替換,q表示退出,不替換了,l表示把目前這個替換後就退出,^E(ctrl+e,好像大小寫都可以)表示向下滾動一行,^Y表示向上滾動一行.

在s前面加上範圍,比如:1,5s/from/to表示替換1到5行的from,在vim中有些字元可以很友善的表示一些特殊行,比如.表示目前行,$表示最後一行,第一行當然就是1了.是以我們可以用:.s/from/to指令替換目前行的from,用:.,$s/from/to替換從目前行到結束行的每行的第一個比對的from.from 和to可以使用正規表達式.如:3,10s/^/Add to line Head/gc 将第3到10行前面插入字元"Add to line Head" 并詢問%s/22$/BB/g 替換所有在行尾處出現的22為BB.

回複上一次操作

u如果您誤執行一個指令,可以馬上按下「u」,回到上一個操作。按多次“u”可以執行多次回複。

U撤銷對目前行的所有操作

ctrl+r重做

修改

cw「cw」:更改光标所在處的字到字尾處

c#w例如,「c3w」表示更改3個字

查找字元

/「/關鍵字」:先按「/」鍵,再輸入您想尋找的字元,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往後尋找到您要的關鍵字為止

?先按「?」鍵,再輸入您想尋找的字元,如果第一次找的關鍵字不是您想要的,可以一直按「n」會往前尋找到您要的關鍵字為止。

set hlsearch "打開高亮搜尋

set nohlsearch "關閉高亮搜尋

nohl "隻取消掉目前的搜尋高亮

map &lt;C-n&gt; :nohl&lt;cr&gt;隻需要按Ctrl-n取消查找後的高亮顯示

定義标記

% 跳轉到相配對的括号

gD 跳轉到局部變量的定義處

'' 跳轉到光标上次停靠的地方, 是兩個', 而不是一個"

mx 設定書簽,x隻能是a-z的26個字母

`x 跳轉到書簽處("`"是1左邊的鍵)

&gt; 增加縮進,"x&gt;"表示增加以下x行的縮進

&lt; 減少縮進,"x&lt;"表示減少以下x行的縮進

{ 跳到上一段的開頭

} 跳到下一段的的開頭

( 移到這個句子的開頭

) 移到下一個句子的開頭

[[ 跳轉至上一個函數(要求代碼塊中'{'必須單獨占一行)

]] 跳轉至下一個函數(要求代碼塊中'{'必須單獨占一行)

C-] 跳轉至函數或變量定義處

C-O 傳回跳轉前位置

C-T 同上

nC-T 傳回跳轉 n 次

0 數字0,跳轉至行首

(單引号)'a通路光标所在行的行首

:marks可以看到所有的标記

gg:跳到文檔開頭

G:跳到文檔末尾

0:跳到行的開頭

CTRL+O跳到一個老地方(或輕按兩下 " 鍵)

CTRL+L跳到一個新地方

vim中執行shell指令,有以下幾種形式

1):!command

不退出vim,并執行shell指令command,将指令輸出顯示在vim的指令區域,不會改變目前編輯的檔案的内容

2):r !command

将shell指令command的結果插入到目前行的下一行

例如

:r !date,讀取系統時間并插入到目前行的下一行.

3):起始行号,結束行号!command

将起始行号和結束行号指定的範圍中的内容輸入到shell指令command處理,并将處理結果替換起始行号和結束行号指定的範圍中的内容.

4):起始行号,結束行号 w !command

将起始行号和結束行号所指定的範圍的内容作為指令command的輸入.不會改變目前編輯的檔案的内容.

<a href="http://linux.chinaunix.net/techdoc/beginner/2009/12/20/1150108.shtml" target="_blank">vim基本指令</a>

其它指令:

寫完指令行,在最後加上$,将指令挂到背景運作.

正在運作指令時,按Ctrl+Z,将程序挂到背景并暫停.

bg 指令在背景運作被暫停的作業.

fg 将背景作業放到前台運作.

objdump指令可以用來檢視連結後的輸出可執行檔案的内容.

關于c++編輯:

#include 指令的兩種使用形式:

(1) 尖括号告訴編譯器在一個或者多個标準系統目錄中找到檔案/usr/include /usr/local/include;

(2) 雙引号意味着首先搜尋本地目錄(如果在本地目錄找不到,再到标準系統目錄中找),但是具體搜尋哪個目錄依賴于編譯器。

有些編譯器搜尋源代碼檔案所在目錄,有些編譯器搜尋目前工作目錄,有些搜尋工程檔案所在目錄。gcc的本地目錄,預設情況下就是源碼(.c檔案)所在目錄,當然也可以用-I指定本地目錄(可以用多個-I指定多個本地目錄)

gcc預設就會搜尋/usr/include /usr/local/include的,你還可以設定環境變量CFLAGS=-I /somewhere $CFLAGS增加搜尋路徑.

其它:

檔案結束符----EOF

本文轉自jetyi51CTO部落格,原文連結: http://blog.51cto.com/jetyi/796626,如需轉載請自行聯系原作者

繼續閱讀