VIM常用操作, 外掛程式和vimrc檔案

來源:互聯網
上載者:User

VIM常用操作, 外掛程式和vimrc檔案

先:

我的自訂色彩配置:

系統的evening色彩配置:

1.常用操作
VIM作為文字編輯器,其強大之處,在我看來,首先就是快速的編輯能力,其次才是豐富的擴充外掛程式。
所以掌握vim的快速編輯的方法是非常重要的,這裡列舉一些必須熟記的跟效率有關的操作.

<基本編輯操作>
上下左右移動:對應為上(K),下(J),左(H), 右(L);這個是基本要求,千萬不要用方向鍵,用方向鍵的朋友傷不起~。
gg:跳到文檔開頭
G:跳到文檔末尾
w:跳到下一個單詞開頭; 4w:跳到往後的第四個單詞的開頭,依次類推.
e:跳到下一個單詞結尾
b:跳到上一個單詞開頭;4b:跳到往前的第四個單詞的開頭,依次類推.
0:跳到行的開頭
^:跳到行的開頭的第一個字元處
$:跳到行的末尾

<快速編輯操作>
=:快速調整當前行的縮排 gg=G:全文檔快速縮排調整
Ctrl+p(Ctrl+n):快速補全命令,這個在寫代碼時非常有用,在編輯模式中, 輸入幾個字元後再輸入此命令則 開始向上(下)搜 索開頭與其匹配的單詞並補齊, 不斷輸入此命令則迴圈尋找. 此命令 會在所有在這個 vim 程式中開啟的檔案中進行匹配.
Ctrl+x+l:自動補全一行的內容,只在當前文檔尋找匹配的行,多個選項時通過快速補全命令選擇.
Ctrl+x+f:自動補全目錄.如我輸入 c:\p,然後按Ctrl+x+f, 則得到 C:\Program Files\
abbr:縮寫設定,如:abbr cmain int main(int argc, char** argv),則下次只要輸入cmain後再輸入其他非字母符號, 它就會自動擴充為int int main(int argc, char** argv)
qa:錄製宏, 宏這個不多解釋,就是為了重複執行一系列操作準備的,好一點的編輯器都可以錄製宏.
q:結束錄製
@a: 執行一次宏, 100@a:重複執行100次

<尋找相關>
尋找預設是區分大小寫,要不區分大小寫話,先:set ignorecase
f:在當前行尋找字元,如fx尋找x, ';'尋找下一個, ','尋找上一個.
/xxx: 向下尋找xxx,xxx允許Regex
?xxx:向上尋找xxx,xxx允許Regex
n:尋找下一個
N尋找上一個
*:尋找並高亮當前游標下的單詞.
g*:尋找並高亮包含當前單詞的字串. 如"helloworld world", 游標在空格後的world上按g*, 則"helloworld"也會高亮
%:尋找與游標所在處括弧相匹配的反括弧, 包括 () [] {}

<替換相關>
替換是vim的強項, 因為可以用正規運算式來匹配字串.
替換運算式的一些字元含義:
%:全文檔搜尋
g:全部替換
c:替換前確認
以下提供幾個例子.
:s/aa/bb/g :將游標所在行出現的所有包含 aa 的字串中的 aa 替換為 bb, g表示全部匹配點都替換,沒有g則只替換第一個匹配的
:s/\<aa\>/bb/g :將游標aaxy所在行出現的所有 aa 替換為 bb, 僅替換 aa 這個單詞,類似於aaxy之類的不會被替換
:%s/aa/bb/g :將文檔中出現的所有包含 aa 的字串中的 aa 替換為 bb
:12,23s/aa/bb/g :將從12行到23行中出現的所有包含 aa 的字串中的 aa 替換為 bb
:12,23s/^/#/ :將從12行到23行的行首加入 # 字元
:%s= *$== :將所有行尾多餘的空格刪除
:g/^\s*$/d :將所有不包含字元(空格也不包含)的空行刪除.

<複製粘貼>
y 表示拷貝, d 表示刪除, p 表示粘貼. 其中拷貝與刪除是與游標移動命令
YY:複製整行
dd:刪除整行
ddp:交換當前行和下一行
ggyG:表示複製整篇文檔
ggdG:表示刪除整篇文檔
yw:表示拷貝從當前游標到游標所在單詞結尾的內容.
dw:表示刪除從當前游標到游標所在單詞結尾的內容.
y0:表示拷貝從當前游標到游標所在行首的內容.
d0:表示刪除從當前游標到游標所在行首的內容.
y$:表示拷貝從當前游標到游標所在行尾的內容.
d$:表示刪除從當前游標到游標所在行尾的內容.
yfa:表示拷貝從當前游標到游標後面的第一個a字元之間的內容.
dfa:表示刪除從當前游標到游標後面的第一個a字元之間的內容.

 

2.常用外掛程式
<ctags>
這個其實不算外掛程式,是一個獨立的程式,需要安裝這個程式放在系統Path所包含的目錄中。
安裝很簡單,直接下載ctags.exe即可(Windows下),最簡單就直接將ctags放在system32目錄下。
為了操作方便,在vimrc中設定一些快速鍵就可以了:
"-------------------------------------------cags------------------------------>>
map <F8> :!ctags -R --fields=+lS <CR> "產生tag檔案,喜歡的時候就按一下F8"
"映射跳轉快速鍵,跳轉到游標下單詞的定義處,g]會列出捷徑清單,如果需要自動跳轉到第一個記錄,則用map fj <C-]>"
map fj g]
"跳回之前的位置"
map ff <C-T>

<taglist>
這個外掛程式用來查看當前檔案定義的變數、函數等資訊, 挺有用的,被用得很泛濫.
安裝很簡單,下載taglist.vim放入vim的plugin目錄就可以了
在vimrc中簡單設定一些選項:(更多設定自己輸入:help taglist.txt查看哦,記得之前要將taglist.txt放入vim的doc目錄哦)
"-------------------------------------------taglist-------------------------->>
"快速鍵"
noremap <F11> :TlistToggle<CR>
"以下是一些taglist設定"
"設定windows系統中ctags程式的位置"
if MySys() == "windows"
"指定ctags程式的位置"
let Tlist_Ctags_Cmd = 'ctags'
elseif MySys() == "linux"
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
endif
"不同時顯示多個檔案的tag,只顯示當前檔案的"
let Tlist_Show_One_File = 1
"如果taglist視窗是最後一個視窗,則退出vim"
let Tlist_Exit_OnlyWindow = 1
"在右側視窗中顯示taglist視窗"
let Tlist_Use_Right_Window = 1
"設定按照名稱排序,這樣或許找函數名會容易些"
Tlist_Sort_Type="name"
"vim啟動時自動開啟taglist視窗"
"Tlist_Auto_Open=1
"開啟taglist時焦點自動轉到taglist視窗"
"Tlist_GainFocus_On_ToggleOpen=1
"讓taglist始終解釋檔案中的tag,不管taglist視窗有沒有開啟"
"Tlist_Process_File_Always=1

<NERD_tree.vim>
分類樹, 同時還可以對檔案進行vim的開啟操作等.
安裝跟上面的一樣,下載NERD_tree.vim放入vim的plugin目錄.
在vimrc中設定一下:
"-------------------------------------------NERD_tree.vim--------------------->>
"設定快速鍵"
nmap <F2> :NERDTreeToggle<cr>

"禁用所有與NERD_tree有關的命令"
"let loaded_nerd_tree=1
"不顯示指定的類型的檔案"
"let NERDTreeIgnore=['/.vim$', '/~$']
"不顯示隱藏檔案(好像只在linux環境中有效)"
let NERDTreeShowHidden=0
"排序"
let NERDTreeSortOrder=['//$','/.cpp$','/.c$', '/.h$', '/.py$', '/.lua$', '*']
"不分大小寫排序"
let NERDTreeCaseSensitiveSort=0
"設定視窗尺寸"
let NERDTreeWinSize=30
"是否顯示行號"
"let NERDTreeShowLineNumbers=1
"是否顯示書籤"
"let NERDTreeShowBookmarks=1
"開啟檔案後, 關閉NERDTrre視窗"
"let NERDTreeQuitOnOpen=1
"高亮NERDTrre視窗的當前行"
let NERDTreeHighlightCursorline=1

<bufExplorer.vim>
用來切換vim當前開啟的檔案的.
安裝如上,下載bufExplorer.vim放到vim的plugin目錄下.
在vimrc中設定一下:
"-----------------------------------------bufExplorer.vim--------->>"
noremap zz :BufExplorer<CR>

安裝了以上幾個外掛程式後,vim已經像模像樣了,用起來也很方便了.<F2>開啟瀏覽目錄, <F11>開啟taglist, <F5>產生tag,fj跳轉,ff跳轉返回 zz開啟緩衝檔案視窗

vimrc檔案
vimrc檔案配置得好的話,操作起來更方便快捷, 這個不多說了,附上我的vimrc檔案:

-------------------------------------------基本設定------------------------->>
set fileencodings=ucs-bom,utf-8,cp936 "自動識別的檔案編碼
set nocompatible "不相容vi
set magic
set ru "尺規資訊
set ai "自動縮排
set sw=4 "自動縮排寬度
set ts=4
set dy=lastline "顯示最多行,不用@@
set backspace=indent,eol,start
colo evening
sy on
set go= "無菜單、工具列
set nobackup
set hlsearch
set incsearch
set hls
set showmatch
set autochdir "需要自動改變vim的目前的目錄為開啟的檔案所在目錄則設定此項
set showcmd
set smartindent
set tags=tags; "設定tag檔案的搜尋路徑
set tags+=/usr/include/tags;
filetype plugin on "支援外掛程式
set cursorline "當前行有底線
set virtualedit=onemore
"set number "需要顯示行號則設定該項
"set path=.,/usr/include,include "vimgrep時額外的搜尋路徑
"highlight Comment ctermfg=gray "設定注釋的顏色
"highlight Macro ctermfg=blue "設定宏定義的顏色
"hi Folded ctermfg=red ctermbg=darkblue
"hi FoldColumn guibg=green guifg=grey20 ctermfg=4 ctermbg=7

"-------------------------------------------快速鍵設定----------------------->>
noremap <C-S> :update<CR>
noremap <F5> :w<CR> :!Python %<CR>

" 檔案尋找
noremap <F3> :vimgrep /<C-R>=expand("<cword>")<CR>/j *.txt *.cpp *.h *.py *.java *.lua<CR> \| :copen<CR>
noremap <F7> :vimgrep /<C-R>=expand("<cword>")<CR>/j **/*.txt **/*.cpp **/*.h **/*.py **/*.java **/*.lua<CR> \| :copen<CR>
noremap <C-F7> :vimgrep /<C-R>=expand("<C-R>+")<CR>/j **/*.txt **/*.cpp **/*.h **/*.py **/*.java **/*.lua<CR> \| :copen<CR>

" tabedit
nmap te :tabedit
nmap tn :tabnew<CR>
noremap <TAB> :tabn<cr>

"-------------------------------------------函數定義------------------------->>
fun! ToggleFold()
if foldlevel('.') == 0
normal! l
else
if foldclosed('.') < 0
. foldclose!
else
. foldopen!
endif
endif
" Clear status line
echo
endfun

"空格鍵摺疊/展開摺疊
noremap <space> :call ToggleFold()<CR>

function FoldBrace()
if getline(v:lnum+1)[0] == '{'
return 1
endif
if getline(v:lnum) =~ '{'
return 1
endif
if getline(v:lnum)[0] =~ '}'
return '<1'
endif
return -1
endfunction
if has("autocmd")
filetype plugin indent on
augroup vimrcEx
au!
autocmd FileType text setlocal textwidth=78
autocmd BufReadPost *
\ if line("'\"") > 0 && line("'\"") <= line("$") |
\ exe "normal g`\"" |
\ endif
au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldexpr=FoldBrace()
au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldmethod=expr
au BufReadPost *.h,*.hh,*.c,*.ec,*.cpp,*.hpp,*.ecpp,*.pc set foldenable
au BufWinLeave *.ztx mkview
au BufWinEnter *.ztx silent loadview
au BufNewFile,BufRead *.txt setf txt
augroup END
endif

""快顯視窗,讓使用者輸入要查詢的字串
"在include 和 source目錄中尋找,你可以根據情況進行修改
function s:Searchwordzx()
let findstring = inputdialog("Search string: ",expand("<cword>"))
if findstring != ""
execute "vimgrep " findstring "*"
endif

endfunction

""========================================
""從sdir.txt中讀入目錄,並在這些目錄下尋找指定字串,
"”sdir.txt要和來源程式放在同一個目錄下。
function s:Searchwordglzx()
let searchstring = expand("<cword>")

let searchdir = ''
for line in readfile("sdir.txt",'',6)
let searchdir .= fnameescape(line).'*.[csh] '
endfor

if searchstring != ""
execute "vimgrep " searchstring searchdir
endif

endfunction

"=====================================================================外掛程式=============================================================
"-------------------------------------------ctags---------------------------->>
noremap <F8> :!ctags -R --fields=+lS <CR>
nmap fj g]
nmap ff <C-T>

"-------------------------------------------taglist.vim---------------------->>
noremap <F11> :TlistToggle<CR>

let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_Right_Window = 1

"-------------------------------------------NERD_tree.vim-------------------->>
"設定快速鍵"
noremap <F2> :NERDTreeToggle<cr>

"禁用所有與NERD_tree有關的命令"
"let loaded_nerd_tree=1
"不顯示指定的類型的檔案"
"let NERDTreeIgnore=['/.vim$', '/~$']
"不顯示隱藏檔案(好像只在linux環境中有效)"
let NERDTreeShowHidden=0
"排序"
let NERDTreeSortOrder=['//$','/.cpp$','/.c$', '/.h$', '/.py$', '/.lua$', '*']
"不分大小寫排序"
let NERDTreeCaseSensitiveSort=0
"設定視窗尺寸"
"let NERDTreeWinSize=30
"是否顯示行號"
"let NERDTreeShowLineNumbers=1
"是否顯示書籤"
"let NERDTreeShowBookmarks=1
"開啟檔案後, 關閉NERDTrre視窗"
"let NERDTreeQuitOnOpen=1
"高亮NERDTrre視窗的當前行"
let NERDTreeHighlightCursorline=1

"-------------------------------------------BufExplorer.vim------------------>>
noremap zz :BufExplorer<CR>

我的自訂色彩配置檔案(效果見第一張圖):

 

self.vim(將該檔案放在vim的colors目錄下,然後在vim中輸入命令:colo self 即可切換到該色彩配置,也可以在vimrc中指定)

" Vim color file
" Maintainer:Bram Moolenaar <Bram@vim.org>
" Last Change:2006 Apr 14

" This color scheme uses a dark grey background.

" First remove all existing highlighting.
set background=dark
hi clear
if exists("syntax_on")
syntax reset
endif

let colors_name = "self"

hi Normal ctermbg=Black ctermfg=grey guifg=#c0c0c0 guibg=Black gui=none

" Groups used in the 'highlight' and 'guicursor' options default value.
hi ErrorMsg term=standout ctermbg=DarkRed ctermfg=White guibg=Red guifg=White
hi IncSearch term=reverse cterm=reverse gui=reverse
hi ModeMsg term=bold cterm=bold gui=bold
hi StatusLine term=reverse,bold cterm=reverse,bold gui=none guifg=blackguibg=#606060
hi StatusLineNC term=reverse cterm=reverse gui=none guifg=blackguibg=#606060
hi VertSplit term=reverse cterm=reverse guifg=#606060guibg=#606060 gui=none
hi Visual term=reverse ctermbg=black guibg=#353535
hi VisualNOS term=underline,bold cterm=underline,bold gui=underline,bold
hi DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red
hi Cursor guibg=#dddddd guifg=Black
hi lCursor guibg=Cyan guifg=Black
hi Directory term=bold ctermfg=LightCyan guifg=lightgreen gui=underline
hi LineNr term=underline ctermfg=cyan guifg=#388080
hi MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen
hi NonText term=bold ctermfg=LightBlue guifg=LightBlue guibg=black
hi Question term=standout ctermfg=LightGreen gui=bold guifg=Green
hi Search term=reverse ctermbg=Yellow ctermfg=Black guibg=lightYellow guifg=Black
hi SpecialKey term=bold ctermfg=LightBlue guifg=Cyan
hi Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta
hi WarningMsg term=standout ctermfg=LightRed guifg=Red
hi WildMenu term=standout ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black
hi Folded term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=DarkGrey guifg=DarkBlue
hi FoldColumn term=standout ctermbg=LightGrey ctermfg=DarkBlue guibg=Grey guifg=DarkBlue
hi DiffAdd term=bold ctermbg=DarkBlue guibg=DarkBlue
hi DiffChange term=bold ctermbg=DarkMagenta guibg=DarkMagenta
hi DiffDelete term=bold ctermfg=Blue ctermbg=DarkCyan gui=bold guifg=Blue guibg=DarkCyan
hi CursorColumn term=reverse ctermbg=Black guibg=grey40
hi CursorLine term=underline cterm=underline guibg=#202020
"文法關鍵字
hi statementguifg=#005cffctermfg=bluectermbg=blackgui=none
hi preprocguifg=#005cffctermfg=blue
"類型關鍵字
hi typeguifg=#005cffctermfg=bluectermbg=blackgui=none
"注釋
hi commentguifg=greenctermfg=greenctermbg=blackgui=none
"常量
hi Constant term=underline ctermfg=Magenta guifg=#ff8000 gui=none
"數字
hi Number term=underline ctermfg=Magenta guifg=Magenta gui=none
"標識符,如lua中的function end if
hi identifierguifg=#005cffctermfg=redgui=none
"標籤
hi labelguifg=yellowctermfg=yellow
hi operatorguifg=orangectermfg=lightRedctermbg=darkBlue
hi TabLine guifg=black gui=none
hi TabLineSelgui=none
hi TabLineFillguibg=darkgreygui=none
hi MatchParen ctermbg=blue guibg=lightblue guifg=black
hi Pmenuguibg=#101010guifg=#909090 gui=none

 

" Groups for syntax highlighting
hi Special term=bold ctermfg=LightRed guifg=Orange guibg=grey5
hi Ignore ctermfg=DarkGrey guifg=grey20

" vim: sw=2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.