2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

程序員用 vim 編輯代碼的常用技巧

 herowuking 2014-04-10

程序員用 vim 編輯代碼的常用技巧

在oschina看到不錯的vim技巧文章,讀了之后vi水平大有提高呵呵。 總結一下寫代碼的常用vi的命令,以后繼續(xù)總結到這里來吧。大家有什么好的技巧也可以教我一下。

 

   

-----------基本動作--------------

i     切換到插入模式,在光標之前

a     切換到插入模式  在光標之后,自己體會和i的區(qū)別吧

I     切換到插入模式,光標在行的開始

A     切換到插入模式  光標在行的結尾


v  進入 visual mode ,選擇模式?

R  進入替換模式,輸入的文字直接覆蓋替換光標下的字符。 直到按<Esc>建退出。


<Esc>  退出輸入模式,

 

:w    保存文件

:w  newfilename  文件另存為

:q    退出編輯

:wq   保存并退出

:edit  打開另外一個文件, 可以用<TAB> 補全


u     undo  取消上次修改

ctrl + R    redo 重復上次修改


:help   后面加上某個命令,查看vim的幫助文檔

 

--------------編程常用設置--------------------

:set nowrap  / set wrap   "禁止自動換行/啟用自動換行  有時候不自動換行看起來更清楚一些

:set number   "顯示行號

:set tabstop=4    "設置tab的寬度

:set shiftwidth=4  "設置自動縮進的的寬度

:syntax on   "語法高亮

:set filetype=c    "如果文件擴展名不是 c,可以用這個為vim指定文件格式。

:set cindent    "啟用 C 的自動縮進

:set colorcolumn=80    "設置代碼一行最多80字符長度的可視邊界,7.3版本以后可用。

"不大常用的tab相關設置 :set softtabstop=4 ,:set smarttabs,  :set  expandtab   把插入的tab 都轉換成空格  , 還有retab等,按照設置重新轉換tab ? (用法 :%retab8 )  ,

 "突出顯示當前行 set nocursorline

set cursorline

" 自動切換當前目錄為當前文件所在的目錄

set autochdir

" 允許在有未保存的修改時切換緩沖區(qū),此時的修改由 vim負責保存

set hidden

 set nobackup  "禁用vim的自動備份文件功能

" 搜索時,高亮顯示搜索到的單詞


set hlsearch

colorscheme evening    "設置代碼高亮 的 顏色配置方案為  evening 

"我比較喜歡下面這幾種配色,都可以在網(wǎng)上找到吧 monokai  evening  twilight  vividchalk  freya  spiderhawk   

colorscheme monokai  "我覺得這個最好看了


set exrc  "設置vim加載所有目錄下.vimrc文件,這樣每個工程目錄就可以有自己的自定義設置了。


set secure  '限制上一步設置里面的目錄下的vimrc不能使用某些不安全的命令



很多配色方案可以到vim網(wǎng)站去找,不過這里也有個抓屏,查看方便

VIM Color Scheme Test 

http://vimcolorschemetest./svn/html/index-c.html



設置編碼, 參考 正確設置 Vim 的字符編碼選項 http:///vim-gvimvim-on-win32

set encoding=utf-8  這個設置了之后會在文件結尾加上編碼標志,只是gvim內部使用的? 我看有問題再設置這個選項好了

set fileencoding=

上面的設置可以直接執(zhí)行也可以放到vimrc文件里面去,以便每次啟動時有效??梢韵旅孢@個加到vimrc方便使用

 編碼設置相關設置的說明: 來自 http://wensuper./blog/1495384

       encoding(enc):encoding是Vim的內部使用編碼,encoding的設置會影響Vim內部的Buffer、消息文字等。在Unix環(huán)境下,encoding的默認設置等于locale;Windows環(huán)境下會和當前代碼頁相同。在中文Windows環(huán)境下encoding的默認設置是cp936(GBK)。 
        fileencodings(fencs):Vim在打開文件時會根據(jù)fileencodings選項來識別文件編碼,fileencodings可以同時設置多個編碼,Vim會根據(jù)設置的順序來猜測所打開文件的編碼。 
        fileencoding(fenc):Vim在保存新建文件時會根據(jù)fileencoding的設置編碼來保存。如果是打開已有文件,Vim會根據(jù)打開文件時所識別的編碼來保存,除非在保存時重新設置fileencoding。 
termencodings(tenc):在終端環(huán)境下使用Vim時,通過termencoding項來告訴Vim終端所使用的編碼。 
        termencodings(tenc):在終端環(huán)境下使用Vim時,通過termencoding項來告訴Vim終端所使用的編碼。 

|:help encoding-values|列出Vim支持的所有編碼。 




設置gui界面 字體,打開時自動最大化

if has("gui_running")

    if has("win32")

        " 設定 windows 下 gvim 啟動時最大化

        autocmd GUIEnter * simalt ~x

        " 設定 windows 下圖形界面下的字體。該字體需要自己下載安裝,下載地址:

        "好像程序員比較喜歡的字體有

        "1. Bitstream Vera Sans Mono

        "http://www-old./fonts/

        "http://ftp./pub/GNOME/sources/ttf-bitstream-vera/1.10/

        "2. 微軟visual stuido 自帶的 Consolas字體

        "http://www.microsoft.com/en-us/download/details.aspx?id=17879

        " 下載安裝完,gvim的菜單里面又有了Consolas 字體,可以用下面這個設置

        "  set guifont=Consolas:h12:cANSI     

        "  Bitstream_Vera_Sans_Mono在默認的 gvim菜單里面有這個,

        "下面這個設置字體大小為12

         set guifont=Bitstream_Vera_Sans_Mono:h12:cANSI     

    else

        " 設定 linux 下圖形界面下的字體,該字體 Fedora 7 自帶

        set guifont=DejaVu\ LGC\ Sans\ Mono\ 14

    endif

endif



記錄上次文件打開時的光標的位置,這個很好,下次打開自動把光標移到上次修改的地方。 BufReadPost 是文件加載完的時候的動作吧

 autocmd BufReadPost *

\ if line("'\"")>0&&line("'\"")<=line("$") |

\exe "normal g'\"" |

\ endif



"隱藏gvim的工具欄和菜單,按f1時才彈出, Toggle Menu and Toolbar
set guioptions-=m
set guioptions-=T
map <silent> <F1> :if &guioptions =~# 'T' <Bar>
        \set guioptions-=T <Bar>
        \set guioptions-=m <bar>
    \else <Bar>
        \set guioptions+=T <Bar>
        \set guioptions+=m <Bar>
    \endif<CR>

參考 http://vimdoc./htmldoc/gui.html




" 這個比較放到上面的go語言插件的后面才起作用,go那里好像重設置語法了

" 高亮顯示行尾的空格,和空格和TAB鍵混用的情況

" http://vim./wiki/Highlight_unwanted_spaces

" ctermbg 必須用顏色名字,guibg可以用顏色值

highlight default ExtraWhitespace ctermbg=red guibg=#F92672

match ExtraWhitespace /\s\+$\| \+\t/

" 可以用下面這個刪掉所有的行尾空格

" %s/\s\+$//

" 或者像下面這個map <leader>w git stripspace命令,來刪掉這個 whitespace error

" 默認的<leader>鍵是 “\ ” 有的是逗號",”

function! Preserve(command)

  " Preparation: save last search, and cursor position.

  let _s=@/

  let l = line(".")

  let c = col(".")

  " Do the business:

  execute a:command

  " Clean up: restore previous search history, and cursor position

  let @/=_s

  call cursor(l, c)

endfunction


" delete all trailing whitespace in current file

if has ("win32")

map <leader>w :call Preserve(":%!c:/git/bin/git.exe stripspace")<CR>

else

map <leader>w :call Preserve(":%!git stripspace")<CR>

endif



set path="" vim搜索c的+include文件的路徑,比如下面 [I   gf 命令等需要打開頭文件的時候,就要根據(jù)這個path變量去搜索了。


------------移動光標---------------

h   j   k   l  光標 “左 下 上 右” 移動

0        光標移動到本行的的開始

^        光標移動到本行的第一個字符

$        光標移動到本行末尾

b        光標移到單詞的開頭

e        光標移到單詞的末尾

w        光標移到下一個單詞

大寫的 E W和小寫的e w類似,不過單詞是以空格作為分界。移動光標到下一個空格的的前或者后面一個字符。

+       光標移到下一行的開頭

-       光標移到上一行的開頭

%        光標在匹配 最近() {} 塊切換,這個很有用啊,類與visual studio中的ctrl + ]

‘’       兩次單引號,光標移到上次修改的位置。 兩次反引號 ` 才是正式的寫法? 一個反引號加上一點(`.)也可以跳到最后一個修改的位置(參加mark和macro的用法  http://www./vi-vim-tutorial-5.gif

        其實是反引號書簽的用法來的,    “m + 一個字母表示的書簽名字”  就在當前行設置一個書簽。   “反引號 + 一個字母表示的書簽名字” 就跳到該書簽的位置。

     標簽的一個 用法,比如要刪大量內容,可以在某個地方ma ,mz 之類的設置標簽到某行,然后把光標移到對應的位置,再 d`a   y`z 之類的可以刪除到指定標簽位置的所有內容。

     gvim里面單引號和反引號一樣的效果,ma 之后, ‘a可以移動到書簽a的位置



G        光標移到文件的末尾

gg       光標移到文件的開始

行號+G   或者 行號+gg    跳轉到第幾行

f + 字符   光標移到本行的 下一個指定字符,搜索

F + 字符   光標移到本行的 上一個指定字符,反向搜索

{  段落的開始

}  段落的結尾


(  句子的開始

)  句子的結尾


g,    最近的修改

g;    最近的修改


gd 移到程序變量的定義   在函數(shù)里面查找

gD 移到程序變量的定義   在文件里面查找


[(   移到光標位置到  類似if 的條件判斷的括號的開始

])   移到光標位置到 類似if 的條件判斷的括號的結尾

[{    代碼塊的開始(for 循環(huán)if等的大括號)

]}    代碼塊的結尾 (for 循環(huán)if等的大括號)

[[  移到函數(shù)的開始{

]}  移到函數(shù)的結尾的}


[#   ]#   移到外層#if  #endif的 

[/  代碼注釋的塊的開始

]/  代碼注釋的塊的結尾

參考 *29.3* Moving through a program

 http://vimdoc./htmldoc/usr_29.html#29.3

 

 zz       光標當前位置滾動到移到屏幕的中間

zt  zb  光標當前位置滾動到屏幕頂端和底部

shitf + M   光標滾動到移到屏幕的中間, 自己體會 和zz的區(qū)別

shitf + H   光標滾動到移到屏幕的頂端

shitf + L   光標滾動到移到屏幕的底部

ctrl + E    向上滾屏

ctrl + Y   向下滾屏, windows的vim聽說需要重新map一下命令才有效果,否則是redo效果,自己google一下吧

ctrl + F  ctrl +B  上下翻頁


ctrl  + o    ctrl + i  移動光標到上一次光標所在的位置,在光標的歷史位置記錄里面前后移動。

*CTRL-O* 

CTRL-O Go to [count] Older cursor position in jump list 
(not a motion command). {not in Vi} 
{not available without the |+jumplist| feature} 

<Tab> or *CTRL-I* *<Tab>* 
CTRL-I Go to [count] newer cursor position in jump list 
(not a motion command). 
In a |quickfix-window| it takes you to the position of 
the error under the cursor. 
{not in Vi} 
{not available without the |+jumplist| feature} 

--------------搜索用法-----------------

# 和 *      在文件搜索光標當前位置的單詞,高亮位置。向前和向后搜索。 非常有用。

g# g*      同# *用法,但搜索的時候,當前單詞如果作為其他的單詞的一部分的時候,也高亮顯示。# 和 *  要求完整匹配,這個值要求部分包含就可以了

/  和 ?    進入搜索模式,在文檔搜索相應的單詞。 向前和向后

 

n  和 N     上面的兩個搜索用法之后,向前和反向搜索下一個

 

[I     類似# 和 * 用法,不過顯示一個快速列表。 還有這個用來搜索c /c++變量定義的,默認會用tags,但如果沒有tags,也會在include 的頭文件里面也會搜索,準確找到該類型的定義。這點和gD  gd比較類似。 gD在文件里面搜索變量定義,gd在函數(shù)里面搜索,但這個[I 會搜索#include的文件。 include的查找目錄由vim的path變量定義,可以修改vimrc配置文件指定path變量,不然vim會找不到頭文件的。

數(shù)字 + [ + <TAB>     跳到上面一條命令里面顯示的第幾個 位置去。

]I  類似[I   但只列出后面的

]i  類似[I   但只列出前面的

參考 *29.4* Finding global identifiers  http://vimdoc./htmldoc/usr_29.html#29.4



 :/buf\c   搜索內容時,后面加上 \c 不區(qū)分大小寫

---顯示搜索命令歷史--

q/ 顯示搜索命令歷史的窗口 

q? 顯示搜索命令歷史的窗口 可以選擇重用以前用過的搜索查找命令


在多個文件里面搜索

:vimgrep /pattern/[j][g] file file2... fileN



/joe/e                      : cursor set to End of match  搜索時可以移動光標到相對單詞結尾偏移的位置

3/joe/e+1                   : find 3rd joe cursor set to End of match plus 1 [C] 

/joe/s-2                    : cursor set to Start of match minus 2  搜索時可以移動光標到相對丹迪開頭偏移的位置

:g/gladiolli/#              : 彈出所有的包含gladiolli的行供    類似  [I  但【I使用的是當前光標下的詞來搜索


/jo[ha]n     Search john or joan

/\< the      Search the, theatre or then

/the\>       Search the or breathe

/\< the\>   Search the

/fred\|joe   Search fred or joe

/\<\d\d\d\d\>   Search exactly 4 digits

/^\n\{3}    Find 3 empty lines


------------替換操作------------------------------

:s/要替換的單詞/替換為的內容/             和perl里面的正則一樣啊,  

:%s/buf_/buf/c    在全文件替換buf_ 為buf,并且詢問是否替換

:127,215 s/foo/bar    替換127行到215之間的foo為bar。

. 表示當前行, $表示最后一行,


:%s/\%Vold/new/g                : Do a substitute on last visual area [N]


. or $ for current and last lines respectively. One could also use relative prefixes + and - to refer to offsets after or before the curent line, respectively. Thus: :.,$j meaning "from the current line to the last line, join them all into one line". :% is synonymous with :1,$ (all the lines).

The :... g and :... v commands bear some explanation as they are incredibly powerful. :... gis a prefix for "globally" applying a subsequent command to all lines which match a pattern (regular expression) while :... v applies such a command to all lines which do NOT match the given pattern ("v" from "conVerse"). As with other ex commands these can be prefixed by addressing/range references. Thus:.,+21g/foo/d means "delete any lines containing the string "foo" from the current one through the next 21 lines" while :.,$v/bar/d means "from here to the end of the file, delete any lines which DON'T contain the string "bar."


參考文檔 |10.2| Substitution

 http://vimdoc./htmldoc/usr_10.html#10.2



:%s/old/new/g    Replace all occurences of old by new in file

:%s/old/new/gw    Replace all occurences with confirmation

:2,35s/old/new/g   Replace all occurences between lines 2 and 35

:5,$s/old/new/g   Replace all occurences from line 5 to EOF

:%s/^/hello/g    Replace the begining of each line by hello

:%s/$/Harry/g    Replace the end of each line by Harry

:%s/onward/forward/gi   Replace onward by forward, case unsensitive


---------------刪除、復制和粘帖--------------------

o      在光標位置下面新建一行

O     在光標位置上面新建一行

j        合并上下兩行為一行

d       刪除

c       change 剪切并進入插入模式, 和d的區(qū)別是這個會把剪切的記錄也保存到重復命令   .    的記錄里面去。

C    D   d$  c$   刪到行的結尾

s      刪除當前字符并且進入插入模式

S      刪掉一整行然后進入插入模式

行數(shù)+ dd    刪除指定行數(shù),比如 3dd  刪除3行

行數(shù)+ cc    和 上一個類似,但會記錄重復記錄。

 yy                 復制當前行內容到剪切板

行數(shù)+ yy         復制多少行, 3yy  復制3行 

p    在光標前粘貼

P  在光標后粘貼

r   替換當前選中內容,關于選擇,參見下面xisual 模式


可以組合使用

y2w 復制后面連個單詞

d2w    刪除兩個單詞

db     刪除到單詞開頭

di(   di)     da(  da)   刪除括號里面的塊

di>    di<

di{    di}

同樣有

 ce     cw   c3w 等


d/foo  刪除到后面第一個出現(xiàn)foo的地方

y?bar  同樣有復制到前面第一個出現(xiàn)bar的位置

y2/foo 復制當前光標位置到后面第二次出現(xiàn)foo之間的字符。

d/fred/                                :delete until fred

y/fred/                                :yank until fred

c/fred/e                               :change until fred end


利用標簽用法,刪除或復制大塊數(shù)據(jù)

可以在某個地方ma ,mz 之類的設置標簽到某行,然后把光標移到對應的位置,再 d`a  c'a  y`z   之類的可以刪除或復制從當前光標所在wei位置到標簽所在位置的所有內容。 修阿刪除多行數(shù)據(jù)時這個比較方便。


利用visual模式,刪除或復制大塊數(shù)據(jù)。

按v 或者V 進入visual模式后,可以選擇大塊內容,用d c y 等進行操作。參考某某的 “選擇塊”的介紹。



"*  雙引號+星號 再加上復制或者粘貼命令,把內容復制到系統(tǒng)剪切板,

"*yy  把當前行復制到系統(tǒng)剪切板

"*p   從系統(tǒng)剪切板粘帖出來

 


:%s/ *$//g      Delete all white spaces

:g/string/d     Delete all lines containing string

:v/string/d     Delete all lines containing which didn’t contain string

:s/Bill/Steve/    Replace the first occurence of Bill by Steve in current line

:s/Bill/Steve/g    Replace Bill by Steve in current line

:%s/Bill/Steve/g    Replace Bill by Steve in all the file

:%s/\r//g             Delete DOS carriage returns (^M)

:%s/\r/\r/g             Transform DOS carriage returns in returns

:%s#<[^>]\+>##g        Delete HTML tags but keeps text

:%s/^\(.*\)\n\1$/\1/           Delete lines which appears twice

ggVGg?                  Change text to Rot13

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

指定寄存器

d   c  s  y p 等指令操作的內容,默認保存到 “” 寄存器。但也可以用雙引號加 一個字母表示的名字指定26個寄存器中任意的一個。

小寫字母表示替換原有寄存器的內容,大寫表示追加內容到寄存器

"ayy    復制當前行內容到 a號寄存器

“Ayy   把當前行內容添加到寄存器a里面,如果以前a寄存器已經有一行內容了,那么這個做完a寄存器就有兩行內容了。

"ap  粘帖寄存器a里面內容

"bp  粘帖寄存器b里面內容

:reg             : display contents of all registers
:reg a           : display content of register a
qqq              : empty register "q"  應該是記錄 一個空的宏到寄存器,所以寄存器就被清空了
qaq              : empty register "a"


其他的還有 0 到9好等寄存器,只讀寄存器等,參考文檔 

registers

http://vimdoc./htmldoc/change.html#registers


:g/^\s*$/d                  : delete all blank lines

:g!/^dd/d                   : delete lines not containing string

:v/^dd/d                    : delete lines not containing string

:g/joe/,/fred/d             : not line based (very powerfull)

:g/fred/,/joe/j             : Join Lines [N]

:g/^/t.                     : duplicate every line

----------------重復命令-----------------------

.      按 “點” 這個句號字符重復執(zhí)行命令,  從上一個按 i 進入“插入模式”開始到  esc建退出的所有動作。

       非常有用。不如用了重復刪除 重復粘貼等。


 

-------------選擇塊---------------------------

vim里面的 “visual mode”應該也去學一下。 選擇文字時用比較方便。就是進入這個模式之后,把當前光標和你移動到的光標的內容都選擇起來。

v     進入 visual 選擇模式,以字符為選擇單位

V    選擇viusal模式,不過以整行為選擇單位

然后就可以用 hjkl鍵選擇區(qū)域。 


組合命令

“viB”  選擇當前光標所在的兩個大括號包含的整個代碼塊,不包含大括號  

“vaB”  選擇當前光標所在的兩個大括號包含的整個代碼塊,包含大括號

類似的有

vib vab   選擇兩個括號里面的一整塊內容

viw vaw  選擇一個單詞

 

類的的組合有,用于選擇大括號 尖括號等里面的內容,i不包含,a包含??梢院推渌庉嬅罱M合使用。

ii{

a{

i(   a(

i<  a< 

i[   a[


也可以用鼠標直接選擇區(qū)域,那就是select mode,后用鼠標選取之后,可以用ctrl + O  或者ctrl + G切換到visual mode。


很多命令可以在 visual mode下面操作,參考這里

http://vimdoc./htmldoc/visual.html#visual-operators


比較常用的有,選擇多行之后進行刪除復制,修改代碼縮進等。


---------viusul mode的整塊操作模式----Blockwise operators------------

ctrl  + v  開始進入viusual mode的整塊操作模式選取。

然后可以用hjkl 鍵選擇塊。

可以I之后修改esc退出后就應用到所有的行。 d刪除,p可以粘貼整塊的內容等。

windows因為快捷鍵默認ctrl +v 是粘貼,所以 ctrl + q才是塊操作。

這個功能可以用來給多行代碼前面加上注釋 // 。


其他的塊模式的操作有

I 在block的前面插入

A  添加字符串到 block的結尾

c  C  修改block的每一行內容為指定字符床

< >  整block的縮進修改

r    替換

d 刪除整個選中的block

p 粘貼整塊block

參考 http://vimdoc./htmldoc/visual.html#blockwise-operators





其他visual模式說明參考詳細參見:

http://vimdoc./htmldoc/visual.html#Visual

 

-------------代碼縮進-----------------

<      選擇塊減少縮進,自己先用visual 模式,viB 選擇塊之后,再做這個就可以縮進一整塊   

>      選中塊增加縮進。   這個縮進寬度由  set shiftwidth=4 定義 

 <iB   >iB    <aB   >aB 可以直接使用,不用先選擇代碼塊。

>i{   <a{ 等

>%    也可以直接把光標移到塊的前面或者后面的大括號那里,然后運行    >%   命令就可以了,同樣應也有 <%

>i{     上面那個是把大括號一起移動的,這個縮進不包含大括號。

 =     自動縮進代碼塊,用法,先把光標移到一塊的起始括號那里 { ,然后 執(zhí)行   =%  就可以格式化整個代碼塊了。

>>   當前行減少縮進, 左移

<<    當前行增加縮進,右移

5>>   行數(shù)加縮進,那么就一共幾行一起調整縮進

 


組合命令

==   格式化當前一行。

=a{       等號加上其他選擇塊命令,  格式化 一個 代碼塊。

1G=G    解釋1G移到文件開始, G移到文件結束,所以這個組合就是格式化整個文件的代碼。

gg=G    和 1G=G  等價


  -------------------大小寫轉換--------------------------------------

 按 v 進入”visual mode “ 模式,然后選中制定的文字,

再  gu  ,選中的文字轉換為小寫。

    gU  選中的文字轉換為大寫。


guW   guW 等命令可以直接轉換一個單詞的,但我在Windows的 gvim里面好像默認沒有這個用法,只能先到visual選擇模式 gu才可以用??隙髂莻€是vim或者linux平臺的默認設置吧。


轉換光標下面的字符的就是 vgu  vgU 啦,

一開始發(fā)現(xiàn)不進入 ”visual mode “ 模式不能進行大小寫轉換,不過后來發(fā)現(xiàn),這些也是可以直接使用的,下面這些更方便一些吧

 ~ 將光標下的字母大小寫反向轉換 

guw 將光標所在的單詞變?yōu)樾?nbsp;

guw 將光標所在的單詞變?yōu)樾?nbsp;

gUw 將光標所在的單詞變?yōu)榇髮?nbsp;

guu 光標所在的行所有字符變?yōu)樾?nbsp;

gUU 光標所在的行所有字符變?yōu)榇髮?nbsp;

g~~ 光標所在的行所有字符大小寫反向轉換


同樣有 gU2w 等組合

------------------ 其他輔助編程用法-----------------------

[CTRL-I, ]CTRL-I Search for a word under the cursor in the current file and

any brought in by #include directives.

gd,  Search for the definition of a variable 在函數(shù)里面查找

gD Search for the definition of a variable 在整個文件查找

]CTRL-D, [CTRL-D Jump to a macro definition.

]d, [d, ]D, [D Display macro definitions


CTRL-A,CTRL-X : increment, decrement next number on same line as the cursor 只在Linux下面起作用。Windows可能需要重新做一下按鍵映射


ctrl + n   insert模式時,在輸入很長的變量名字函數(shù)名字時,可以使用這個做自動補全,就不用完整的敲入整個變量名字了

ctrl + p  按ctrl + n補全之后,如果不合適,可以用這個取消補全,


----------------------- 臨時退出 Vi/Vim、進入 shell 環(huán)境后再回來的要求:-------------------------------

方法一:使用 Ctrl-z 以及 fg 這兩個命令組合。

  這一解決方法主要利用了 Linux/Unix 的作業(yè)機制。具體原理是:Ctrl-z 命令將當前的 Vi/Vim 進程放到后臺執(zhí)行,之后 shell 環(huán)境即可為你所用;fg 命令則將位于后臺的 Vi/Vim 進程放到前臺執(zhí)行,這樣我們就再次進入 Vi/Vim 操作界面并恢復到原先的編輯狀態(tài)。

方法二:使用行命令 :sh。

  在 Vi/Vim 的正常模式下輸入 :sh即可進入 Linux/Unix shell 環(huán)境。在要返回到 Vi/Vim 編輯環(huán)境時,輸入 exit 命令即可。

  這兩種方法實現(xiàn)機制不一定,但效果一樣,都非??旖萦行?。

---------------------------------取得外部輸入--------------------------------------------------------------

 : r!<cmd> 將命令 <cmd> 的輸出結果插入到當前光標所在位置 

:r <file> 將文件 <file> 讀入到當前光標所在位置

---------------------把多條命令錄制為宏------------------------------

q  加上 一個字母表示宏的名字      表示開始宏的錄制

q  再次按q,表示錄制完成

@  加 一個字母的表示的宏的名字,表示執(zhí)行對應的宏

比如qa 開始錄制宏a, 然后按q停止,再@a就可以執(zhí)行剛剛錄制的宏a了

@@  執(zhí)行最后一次執(zhí)行過的宏。

5@@ 重復執(zhí)行5次最后一次行的宏


多個組合操作需要重復執(zhí)行的時候,使用這個功能可以方便很多。

參考

10.1*Record and playback commands

http://vimdoc./htmldoc/usr_10.html#10.1


http://www./vi-vim-tutorial-5.gif

------------------設置鍵盤快捷鍵-------------------

The main commands to know when dealing with key bindings are:

:map for the modes Normal, Insert, Visual and Command-line  所有模式都起作用

:imap for Insert mode only     只在insert模式起作用

:cmap for Command-line mode only

:nmap for Normal mode only

:vmap for Visual mode only


一個例子,把ctrl + s 映射為后面保存文件

:map <C-s> :w<cr>


其他常用按鍵表示

<CR>     : carriage Return for maps      <Space> 空格鍵
<Esc>    : Escape
<Leader> : normally \  change with :let mapleader = ","
<Bar>    : | pipe
下面這個用在按鍵映射里面不錯,不過肯能只在Linux下面有效,比如下面這個映射為在當前目錄搜索當前光標所在的單詞
	:nnoremap <F3> :grep <C-R><C-W> *<CR><esc>:cw<cr>
CTRL-R CTRL-W   : pull word under the cursor into a command line or search
CTRL-R CTRL-A   : pull whole word including punctuation
CTRL-R -        : pull small register
CTRL-R [0-9a-z] : pull named registers
CTRL-R %        : pull file name (also #)


參考 http://vimdoc./htmldoc/map.html

------------------------查看執(zhí)行過的命令 歷史記錄---------------------------


: 上下鍵 查找和補全


:history   列出所有的歷史記錄

:his c  

:his s

-------------------VIM buffer 窗口-------------------------------------------------------

VIM里面一個buffer對應一個打開的文件


" 允許在有未保存的修改時切換緩沖區(qū),此時的修改由 vim負責保存

:set hidden


"查看已經打開的buffer

:ls   或者 :buffers  命令都可以


“在不同的buffer直接切換,這個很好用

ctrl + 6


"切換到對應的buffer去 比如下面切換到第2個buffer 

:buffer 2


"用不同的窗口打開所有的buffer

:ball

:vertical ball  "在垂直分隔的窗口打開所有buffer


:sbuffer  "split buffer到不同的窗口


前后一個buffer

:bnext   :bn

:bprevious   :bp


:bd[elete][!] [N]  可以指定號碼的buffer,不指定buffer號碼就關閉當前buffer, 會關閉打開這個buffer的所有windoww,并顯示另外一個buffer。 不同于 :q[uit]  和 :close的關閉window命令


另外還可以使用輔助插件

bufexplorer.zip : Buffer Explorer 插件

http://www./scripts/script.php?script_id=42

安裝完 輸入 :BufExplorer  , 就會彈出一個包含所有buffer列表的窗口供選擇。用鼠標或者鍵盤都可以跳轉的到對應的buffer去。

或者在normal模式直接輸入下面這個斜杠開始的命令,都可以打開bufexplorer的窗口。

  '\be' (normal open)  or 

  '\bs' (force horizontal split open)  or 

  '\bv' (force vertical split open) 


"可以把f9映射為這個buffer瀏覽的快捷鍵。

noremap <silent> <F9> :BufExplorer<CR>

nmap <F10> :bn<CR>

nmap <F11> :bp<CR>

--------------------------------配置gvim左側文件瀏覽欄------------------

安裝 nerdtree  這個插件

https://github.com/scrooloose/nerdtree

然后就可以,用  :NERDTree 命令啟動 左側瀏覽欄,然后 在左邊點擊 文件名 就自動打開,鼠標中建點擊,在新的窗口打開文件。

t 鍵 打開一個新的 tab 窗口里面打開文件。

然后可以在vimrc中加入下面這行代碼讓vim 啟動是自動打開 文件瀏覽欄。

autocmd vimenter * NERDTree


安裝很簡單,網(wǎng)頁有說明

cd ~/.vim/bundle
git clone https://github.com/scrooloose/nerdtree.git

在Windows 平臺,放到vim的安裝目錄就可以了。沒有裝git自己下載對應的插件文件放到對應的目錄去就可以了。


最好也安裝一下這個插件配合,這樣在gvim里面啟動時,自動啟動NERDTree 的文件瀏覽欄,并且打開新的tab是,這個文件瀏覽窗口也始終顯示。

不用配置前面的autocmd vimenter * NERDTree 命令了。 他autoload目錄的插件自動加載。

https://github.com/jistr/vim-nerdtree-tabs


有很多默認選項開關 ,可以參考網(wǎng)頁的說明

let g:nerdtree_tabs_open_on_gui_startup=1     這個默認就是1了,

let g:nerdtree_tabs_open_on_console_startup=1   直接在字符終端的的vim里面也默認啟動 NERDTree


不過他這個插件加載比較慢,需要的時候再打開比較好

" 把F2映射為顯示左側目錄瀏覽樹窗口開關

map <F2> :NERDTreeToggle<CR>

-----------------------c/c++ 結構解析,函數(shù)快捷查找-------------------------------------------

另外為了瀏覽文件是查看搜索函數(shù)名字,有人還喜歡安裝 

cscope

ctags

taglist

等插件,這樣查看搜索函數(shù)定義之類的方便一點吧。有需要的時候在網(wǎng)上找一下相關資料吧



------------------vim里面搜索目錄下的文件,quickfix模式和grep--------

在vim里面直接搜索目錄下的文件的內容


:grep sendv *.c       使用外部grep程序

:vimgrep /sendv/   *.c   使用內部vim 模式的搜索,速度較慢 Vim 需要載入每個文件,就像編輯它們那樣。如果文件里沒有匹配,相應

的緩沖區(qū)又會被徹底刪除

:vimgrep sendv\c   *.c   使用內部vim 模式的搜索,速度較慢


:help vimgrep

greo 在windows系統(tǒng)默認調用的是findstr /n命令來進行搜索的的, 可以通過  :set grepprg 設置來修改設置

linux缺省為 "grep -n " 參考

http://vimcdoc./doc/options.html#'grepprg'

我安裝了git 自帶一個mingw的grep 還是改為用grep好了,比findstr命令好用吧

:set grepprg=c:/git/bin/grep.exe\ -n

:grep -i sendv *.c 這樣就可以用grep的各種參數(shù)了

其他的'grepformat'設置vim怎么解析grep的輸出,一般都不用修改了吧。參考vm的文檔



搜索之后只顯示一行,可以:cc 重復顯示結果

或者打開 quickfix窗口


:cw[indow] [height]     當存在可以識別的錯誤時,打開窗口。如果該窗口已經打開且

                        沒有可識別的錯誤,則將此窗口關閉。

:cope[n] [height]       打開一個窗口顯示當前的錯誤列表。

:ccl[ose]               關閉 quickfix 窗口。


:colder 和 :cnewer  合適顯示十個搜索歷史記錄


在打開的窗口里面可以直接用鼠標雙擊和enter鍵可以跳到指定找到的指定位置去。

但以前的窗口緩沖器沒有修改才行?   在quickfix 窗口  ctrl +w 在按enter鍵,可以在新窗口打開。


ctrl + w 在窗口直接切換



在quickfix模式里面常用操作

:cc                顯示詳細信息 ( :help :cc )

:cp                跳到上一個結果 ( :help :cp )

:cn                跳到下一個結果 ( :help :cn )

:cl                列出所有結果 ( :help :cl )

:cw                如果有結果列表,則打開quickfix窗口 ( :help :cw )

:col               到前一個舊的結果列表 ( :help :col )

:cnew              到后一個較新的結果列表 ( :help :cnew ) 


可以把這些命令映射到快捷建方便使用

":nmap <F4> :cw<cr>

":nmap <F4> :cclose<cr>

:nmap <F5> :cn<cr>

:nmap <F6> :cp<cr>

   "把 f3 按鍵映射為在本目錄下文件里面搜索光標下面的單詞

if has("win32")

" grep的設置

:set grepprg=c:/git/bin/grep.exe\ -n

"windows平臺用這個

:nmap <F3> "*yw<cr>:grep <c-v> ./*<cr><esc>:cw<cr>

else

" linux 平臺用這個

:nnoremap <F3> :grep <C-R><C-W> *<CR><esc>:cw<cr>

endif


可以使用下面這個顯示和隱藏quickfix窗口的函數(shù),這樣cw 和 cclose功能都映射到同一個按鍵了

" 彈出和隱藏quickfix窗口

" 來自http://vim./wiki/Toggle_to_open_or_close_the_quickfix_window

function! QFixToggle()

  if exists("g:qfix_win")

    cclose

    unlet g:qfix_win

  else

    " copen 10

cw

    let g:qfix_win = bufnr("$")

  endif

endfunction

let g:qfix_win = 1

nmap <script> <silent> <F4> :call QFixToggle()<CR>



參考http://vimcdoc./doc/quickfix.html


這種quickfix的用法,vim內部出了grep 還支持make和其他編譯工具的,可以參考vim的文檔

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



vim-multiple-cursors插件 “True Sublime Text style multiple selections for Vim”

======================================================

https://github.com/terryma/vim-multiple-cursors

允許同時選擇多個同名變量,同時修改。 參考上面主頁上面的動畫演示。比較有意思的一個插件,


可以用 git clone https://github.com/terryma/vim-multiple-cursors 把目錄復制下來,然后把autoload 和 doc plugin目錄復制到vim目


錄去使用就可以了。

使用起來很簡單,在normal模式,把光標移到一個變量名字上面,再不停的按 ctrl +n 就把相同名字的變量都選中了。然后使用vim的命令就


可以編輯了。esc退回普通模式。



commentary.vim 快捷注釋代碼插件

========================

https://github.com/tpope/vim-commentary

Commentary 可以幫你注釋代碼。在normal模式輸入gcc 即可將該行注釋(Commentary 會根據(jù)當前的 filetype 使用.

在visual 模式,額可以選擇多行,然后輸入 gc ,注釋掉整個選中內容。

再次敲擊 gcc 即可還原注釋。我把空格鍵作為注釋映射,下面這樣:


nmap <space> gcc

vmap <space> gc

即在 normal 模式下,敲擊空格鍵可以注釋當前行,在 visual 模式下,敲擊空格鍵可以注釋選中的內容

參考了 http:///2013/11/my-vim-configuration-plugin/的設置


NERD Commente  另外一個輔助注釋代碼的插件

================================

http://www./scripts/script.php?script_id=1218


vim-expand-region 自動擴展選擇區(qū)域的插件

==================================

https://github.com/terryma/vim-expand-region

可以通過 +   _  按鍵來擴大選擇區(qū)域。比如,比如光標在單詞中間,按一下 +,就選中整個單詞,再+就選中單詞外層的括號里面內容。等等,可以去上面主頁去看動畫。我只想在visual模式才使用這個功能,他插件里面會自己做一下判斷你是否已經映射了快捷鍵的,如果已經有了,它就不在做nmap的普通模式的映射了。


" 自動擴大選擇區(qū)域的插件,讓它只在visual 模式才使用+  _鍵盤映射 

vmap + <Plug>(expand_region_expand)

vmap _ <Plug>(expand_region_shrink



YouCompleteMe

===========

c/c++的最好用的自動補全插件,基于clang的c/c++語法分析



 強烈推薦閱讀下面這篇文章,體會 重復命令和 組合命令用法。

 http://www.oschina.net/news/25882/why-they-are-using-vi

為什么這些死腦筋們在用 VI ?

 

翻譯的還好,也許你要原版的。

Why, oh WHY, do those #?@! nutheads use vi?

http://www./a-why-vi-vim.html

 

后來也參考了

技巧:快速提高 Vi/Vim 使用效率的原則與途徑

http://www.ibm.com/developerworks/cn/linux/l-cn-tip-vim/ 


vim的官方文檔,可以用去看一下。不錯的,詳細的說明。

http://vimdoc./htmldoc/usr_toc.html

 不過好像http://www./vim/vimbook-OPL.pdf   這個更有條理一些,講的很詳細,而且例子也不錯,也將很多編程相關的高級用法等。我也參考了一下這個書。


之前發(fā)的一個圖也是很好的參考。

http://hiphotos.baidu.com/widebright/pic/item/5d880d241eb39b40c89559a6.jpg

原來圖是來自這里的啊 

Graphical vi-vim Cheat Sheet and Tutorial  

 http://www./a_vi_vim_graphical_cheat_sheet_tutorial.html

這網(wǎng)站還有很多圖,給出由淺入深的學習步驟圖。


不錯的參考圖書

Hacking Vim

A cookbook to get the most out of the latest

Vim editor


這個帖子提到的幾個用法也不錯

http:///questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118



Best of Vim Tips

http://www./vimtips.html


Using vim as C/C++ IDE

http://www./2014/using-vim-as-c-cpp-ide/

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多