vim命令行參數說明vim
vim -C cmd file 打開文件前執行指定的命令函數
vim -r file 恢復文件字體
vim -R file 只讀方式打開,但能夠強制保存編碼
vim -M file 只讀方式打開,不能夠強制保存加密
vim + file 打開文件定位到文件末尾spa
vim +num file 打開指定的行插件
vim +/string file 打開文件,跳轉到指定的字符命令行
命令模式下的經常使用命令設計
:w 保存文件orm
;wq 保存並退出, 在normal模式下使用 ZZ 也能夠
:o file 打開文件
:n1,n2w file 保存從n1到n2的行爲另外一個新文件
:x 保存退出 在normal模式下使用ZZ也能夠
:q 退出,使用 :q! 強制退出
:saveas file 另存爲一個新文件
:e 從新載人文件
:e! 從新載入文件,並丟棄已經作的修改
:f 顯示文件的編輯狀態
:vs 豎直分割
:sp 水平分割
:pwd 顯示vim的工做目錄
:cd path 改變vim的工做目錄,可使用tab進行補全,方便的切換目錄
:set autochdir 讓vim根據打開的文件自動切換工做目錄,通常寫到配置文件裏
normal模式下的經常使用命令
[n]G 跳轉到第[n]行
H / M / L 跳轉光標到當前屏幕(屏幕的內容是不動)的 開頭/中間/結尾
K man 光標所在的單詞,好比一個函數
gd 跳轉到局部變量定義的地方
gD 跳轉到全局變量的定義的地方
g; 跳轉到上一次修改的地方
g, 跳轉到下一個修改過的地方
% 匹配() {} [] 進行跳轉
ctrl + f 下向滾動一屏
ctrl + b 向上滾動一屏
ctrl + d 向下滾動半屏
ctrl + u 向上滾動半屏
ctrl + e 向下滾動一行
ctrl + y 向上滾動一行
ctrl + g 顯示文件的編輯狀態
ctrl + w 進入分割窗口控制功能, 在這個前提下,可使用以下
命令組合
w 切換下一個窗口
- 當前窗口增高一行
- 當前窗口減小一行
[n] _ 當前窗口儘量的大,也可使用n指定行數, 也可使用 :reesize n 指定當前窗口的行高
= 全部的窗口使用一樣的高度
n ctrl+w _ 指定當前窗口使用n行
< 當前窗口減小一列 ,
n ctrl+w < 或者 ctrl+w [n] < 能夠一次移動n列.
| 當前窗口儘量的寬,
n ctrl+w | 或者 ctrl+w [n] | 能夠設定當前窗口使用n列
ctrl + 0 顯示字體的大小設置爲初始大小
n% 移動到n%的位置,注意沒有:
zz 或者 z + . 把光標所在的行移動的屏幕中間
zt 或者 z + enter 把光標所在的行移動到屏幕開始
zb 或者 z + - 把光標所在的行移動到屏幕末尾
替換<esc>
使用vim的時候<ESC>這個鍵用於從任何模式,回到normal模式,有人曾經開玩笑說我要去買一個<ESC>腳踏板,可見 <ESC>這個鍵在vim中使用頻率是多麼的高,並且,還那麼遠,很是不方便,你沒有想過,設計vim的人是否是腦子有坑呢,反正我想過^-^,直到看到一本叫 <<The Hard Way to Learn VimScript>> 的書才發現,是我腦子有坑.早點看這書就行了.也許凡人們 都喜歡犯的錯誤就是這樣,沒有深入的認識一個事物的時候,就慌忙下結論.怨天尤人,可神會一直對咱們微笑.直到咱們讓陽光 照進內心,才擡頭看到神燦爛的微笑.
使用命令
:inoremap {多個任意字母} <esc>
執行後, 快速輸入 {多個任意字母} 就會退出到normal模式, 快速的意思是在一個光標閃爍以內,這也太簡單了,若是 就着嗎簡單,那爲啥不早點讓我發現寫到配置文件裏啊,其實這是最麻煩的
不使用<ESC>退出到normal模式的方式(默認)
Ctrl + c
Ctrl + [
有關退出到normal模式的高級技巧
使用ALT + {命令組合} , 這個執行之後,至關於在normal模式下使用了命令組合,執行後的狀態取決於命令是什麼,好比
在插入模式下輸入了 ALT + j 那麼效果就是, 往下移動了一行,並進入了normal模式,
在插入模式下輸入了 ALT + O 哪買就是,在當前行上一行插入一行,並因爲O的原始做用是插入進入insert模式,因此 執行後,效果就是在上一行插入了一行,而且停留在插入模式
快速選擇
想複製的東西,既不是一行,也不是一個單詞,複製單詞可使用 yw ,就得手動選擇了,使用v ,按hjkl進行移動,而後y,相似命令以下:
v 普通選擇
shift + v 按行選擇
ctrl + v 塊選擇
gv 從新選中上次的選擇,能夠做爲標記用.
在shift +v 進入選擇一行後的快捷鍵
首先聲明這些都是用來選擇的,要求就是先把光標移動的想要選擇的行,而後按下shift+v而後在按下下面的快捷鍵才起效
iw 選擇光標所在的單詞,別的不在選擇了,對應須要複製函數名稱的時候
i( 或者 i) 選擇在一行以內的()內的內容, 不包括() 必須在一行之內要不找不到,光標必須在()內部
a( 或者 a) 選擇在一行以內的()內的內容, 包括() 必須在一行之內要不找不到,光標必須在()內部
i{ 或者 i} 選擇在{}內的內容, 不包括{} 只選擇最近匹配的 { } 執行一會一下選擇了多行
a{ 或者 a} 選擇在{}內的內容, 包括{} 只選擇最近匹配的 { } 執行之後一下選擇了多行
i< 或者 i> 選擇<>之間的內容,不包括<>
a< 或者 a> 選擇<>之間的內容,包括<>
相似的還有 i[ ( i] ) 和 a[ ( a] )
is 光標在一個函數的聲明出,按下後會選擇這個函數聲明體和函數上方的相鄰註釋,若是在函數定義的地方, 則選擇函數開頭的部分.
ib 和 i( 差很少,只是可查選擇多行之間匹配的()以內的內容, 不包括 (),適用於參數寫在多行的狀況
ab 和 i( 差很少,只是可查選擇多行之間匹配的()以內的內容, 包括 (),適用於參數寫在多行的狀況
tips 利用這些方便的選擇技巧,就能夠方便的進行函數頭和函數複製了,沒必要再來來回回去找匹配了.
查看變量或者函數的聲明和定義
[i 須要把光標移動到將要查看的函數或者變量的位置,只是查看聲明,並不進行光標的跳轉,這個很是有用,你也想在寫函數的時候能看到聲明的函數參數類型的吧.聲明會在下方顯示
[ ctrl+i 這個就會跳轉到函數的定義地方了,和 ctrl + ] 差很少了
[ ctrl+d 這個會調整到對應的宏定義處
不使用ctags,cscope的時候,默認的跳轉命令
把光標移動到對應文件的字符上面,而後按 gf 便可,在新 的窗口打開可使用 ctrl+w f ,在新的tab中打開使用 ctrl+w gf
使用 set suffixesadd+={.hpp} 能夠設定在include的時候不加擴展名的狀況,suffixesadd表示默認加上的擴展名
使用 set path 查看搜索頭文件的目錄有哪些 , 分割的,使用 set path+={目錄} 進行增長
[[ 上一個函數的開頭(須要首行的{), 說這個和語言擴展有關,
若是把{寫到了末尾就直接到文件頭了,之後在研究如何改吧).
]] 下一個函數的開始,說明同上
{{ 上一個塊(空行隔開的)
}} 下一個塊(空行隔開的)
[] 上一個函數的結尾
][ 下一個函數的結尾
[( 當前區塊的 ( 處
]) 當前區塊的 ) 處
同理 [{ ]} 用於{} 嵌套的狀況,好比n層的if . [/ ]/ 用於調整到註釋的/* */ [# ]# 用於#if和#else #endif 之間的跳轉
整理一下以下:
第一個鍵表示方向,第二個鍵表示功能,
[ 表示向前跳轉, ] 表示向後跳轉
第二個是功能
在.vimrc 文件中設定 iskeyword 好比,比較煩人的一個地方是c語言的 Struct.Member 若是使用 w * # ] 功能時,沒法區分 單詞Member,按照Struct.Member是一個單詞進行搜索,在.vimrc文件中添加:
set iskeyword += ,$,@,%,#,.,-
一行,這樣,就能夠了,使用逗號分割每個字符,結尾不能有, .
vim中a到Z是複製緩衝區,能夠吧文本佔時複製到緩衝區中,使用「ayy 把內容複製到a中,使用」ap 把a緩衝區中的內容取出來,要點就是使用」加在緩衝區名字的前面
主要是寄存器操做,簡直神器,
首先,說用寄存器的命令要知道,C-R (ctrl+r)
好比說用a寄存器,就要說按Ctrl+r a 這樣子.
0-9 a-z (只有小寫) 都是vim的寄存器,
其中,1-9 是刪除寄存器,分別記錄上n次刪除的內容,好比,我要複製上5次刪除的內容使用 「5p 就能夠了,
0 上一次複製的內容,yy自動存入,
/ 是上次搜索寄存器
a-z是具名寄存器,好比yy想存入a中,就是用 「ayy 這樣子.
這些寄存器是能夠混用的
好比 / 和 ? 我想搜上4次刪除的內容,就能夠用
/<CTRL+R>4 回車,
這樣子哦,
輸入/」4 只能搜」4這樣的字符,這個和vim的配置相關.
緩衝區的範圍也是a-Z,使用m[a-Z]進行標記,標記的是光標所在的位置,使用’[a-Z]會跳轉到相應的位置,要點就是,使用m標記,使用’進行跳轉。
使用 :marks 顯示全部標記
使用 :set ic開啓忽略大小寫,
使用 :set noic 關閉
ic 即 : ignore case 的簡寫
cscope是用於多種語言的(其實主要仍是c了)的符號查找程序.這個很厲害啊,只是使用起來比ctags稍微麻煩一點.
在源碼目錄使用cscope -cb 會生成一個cscope.out文件,若是隻有指定目錄,就把須要的全部文件寫到cscope.files文件裏, 一行一個文件就好了,
vimrc中也許有像set tag = xxx之類的設置,笨一點的方法就是使用cs add進行加入對應文件
使用 :cs f g XXX 找cscope.out中的XXX定義.
f表示查找 g 表示找定義,可使用 :cs help 進行查看,很方便.
對上一條中 f的展開
:cs help 會有說明
add {file|dir} [prefix dir] 添加一個cscope.out文件,能夠指定文件或者目錄加入cscope.out文件 ,cscope默認使用vim開啓的目錄開始查找,若是改了目錄,使用 prefix dir從新指定一個就行了,要否則就會報某某某文件找不到.
find 查找,在加入的cscope.out文件中,按指定方式找對應的符號,g就是找定義,其餘的看下一條.
kill # 從加入的cscope.out文件中除去一個.# 是序號,也可使用文件指定,使用須要方便啊.
show 顯示已經加入的scope.out文件.前面就是kill須要的序號了.
reset 初始化全部的加入的cscope.out文件.
有關:cs f g XXX中g的擴展
0或s 查找這個符號.
1或g 查找這個定義.
2或d 查找這個函數調用的函數們.
3或c 查找調用這個函數的函數們.
4或t 查找這個字符串.
6或e 查找這個egrep匹配模式.
7或f 查找這個文件.
8或i 查找include這個文件的文件們.
使用技巧.
使用手工輸入函數符號的是否是很麻煩呢,能夠這樣,使用 yw 複製一個單詞,而後使用C_r 0 從複製複製寄存器中拿出上一個複製的內容.
vim顯示行號,很簡單,開始顯示,
set number 簡寫 set nu .
取消顯示
set nonumber 簡寫 set nonu
顯示相對行號 //對於查看結構體特別有用
set relativenumber
取消相對行號顯示
set norelativenumber
有關line函數的使用
這個函數是獲得行數,使用 :help line 能夠查看許多內容.
line(‘.’) 當前行.
line(「‘t」) t標記所在的行,沒有的話,返回0
做用:
給文件添加統一的前面 行號,是內容的序號,不是顯示的.:
:%s/^/\=line('.').' '解釋:
- %s 是全局搜索.
- ^ 表示每一行的開頭
- \= 表示 使用後面的表達式結果進行替換,若是想使用\= ,哪買整個替換後的字符都要是 表達式的結果,就是說,\=只能寫在最前面,不能從中間使用.
- line(‘.’) 表示但前行的行號,這個號碼是根據匹配遊標移動改變的.
- . 表示字符串鏈接,鏈接後面的’ ‘(空格) 你總不但願行號後面沒有空格吧?
計算但前行到指定行的行差
這個比較麻煩,分一下幾步:
- 在基準的行作一個標記,好比 ms 作一個s標記.
- 使用 / 或者其餘什麼手段,移動到所在的行.
- 執行 :echo line(‘.’)-line(「‘s」) 就會在命令輸入行打出一個數字,就是行差了,
雖然比較麻煩,但是使用q 定義好宏之後,使用@執行就好多了.
概述
這裏的vim操做命令指的是按下 : 以後能夠輸入的命令
去掉全部空行
:g/^s*$/d
說明:
g : 全局命令
/ : 分割符
^\s*$: 全部匹配開頭和結尾只有 空格 的行.
/d : 刪除該行
配置
set foldenable 「設置容許摺疊
set foldmethod=[manual|indent|] 「設置摺疊方式,manul手動 indent按縮進摺疊
set foldlevel=3 「設置摺疊的層級大小
操做
在normal模式下進行fold操做
z + c 摺疊光標所在的區域(一次摺疊一層)
z + C 摺疊光標所在的區域(一次把光標所在的區域摺疊到最小)
z + R 打開全部的摺疊(一次打開到沒有摺疊的樣子)
z + r 打開全部的摺疊(一次打開一層摺疊,再桉一次這打開下一層)
z + o 打開光標所在的摺疊,或者 在光標所在的地方 按 l 也能夠
z + M 摺疊全部能夠摺疊的代碼(以最大深度進行摺疊)
z + m 摺疊全部能夠摺疊的代碼(以一層的深度遞增摺疊,再桉一次則摺疊第二層)
配置
這裏使用的是Omni的自動補全插件,其餘的後有一些不一樣的地方
set completeopt=menu,menuone 「關掉補全的預覽窗口
let OmniCpp_MayCompleteDot = 1 「配置’.’之後給出補全信息
let OmniCpp_MayCompleteArrow = 1 「配置’->’之後給出補全信息
let OmniCpp_MayCompleteScope = 1 「配置’::’之後給出補全信息
let OmniCpp_ShowPrototypeInAbbr = 0 「配置補全時是否顯示函數原型,默認是不顯示,1是顯示
還有一些其餘配置,須要的話網上查
操做
補全的操做都是在insert模式下進行的,全部的操做都是使用Ctrl做爲修飾符的,這樣才能區分是否是須要輸入
<C-i> 在任什麼時候刻想要提示一下
<C-g> 取消補全,隱藏補全的選擇列表
<C-n> 選擇下一補全選項
<C-p> 選擇上一個補全選項
<C-I> 根據頭文件進行補全
<C-f> 列出有關文件的補全
<C-o> | <C-k> 把輸入的字符變爲xml的一個節點 div ==> <div> </div>
新建一個加密文件
vim -x file 首次創建會讓你輸入密碼
打開一個加密文件
直接vim file就可了,若是是加密文件,vim會提示輸入密碼的.
給一個明文文件加密,或者改密碼
:set key= 清除密碼
:set key={密碼} 設置密碼爲{密碼}
記得保存後才起效哦
以指定的編碼打開文件
:e ++enc={編碼} {文件} 使用指定編碼打開文件 編碼的可選範圍: utf8 ucs-bom gbk,cp936,gb2312,gb18030
查看文件的當前編碼
:set fenc 顯示文件的編碼
:set enc 顯示vim新建文件的時候的默認編碼
以指定編碼寫入文件(無論文件的當前編碼)
:w ++enc={編碼} [文件]