VIM常用操作, 插件和vimrc文件


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允許正則表達式
?xxx:向上查找xxx,xxx允許正則表達式
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=black guibg=#606060
hi StatusLineNC term=reverse cterm=reverse gui=none guifg=black guibg=#606060
hi VertSplit term=reverse cterm=reverse guifg=#606060 guibg=#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 statement guifg=#005cff ctermfg=blue ctermbg=black gui=none
hi preproc guifg=#005cff ctermfg=blue
"類型關鍵字
hi type guifg=#005cff ctermfg=blue ctermbg=black gui=none
"注釋
hi comment guifg=green ctermfg=green ctermbg=black gui=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 identifier guifg=#005cff ctermfg=red gui=none
"標簽
hi label guifg=yellow ctermfg=yellow
hi operator guifg=orange ctermfg=lightRed ctermbg=darkBlue
hi TabLine guifg=black gui=none
hi TabLineSel gui=none
hi TabLineFill guibg=darkgrey gui=none
hi MatchParen ctermbg=blue guibg=lightblue guifg=black
hi Pmenu guibg=#101010 guifg=#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM