$ cat ~/.vimrc,centos7是在/etc/vimrc文件中配置。javascript
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
php
set textwidth=200
set shiftwidth=4 "縮進的空格數爲4
set noexpandtab
set cindent "C/C++語言的自動縮進方式
set tabstop=4 "設置Tab鍵寬度爲4個空格。css
set softtabstop=4
set expandtab
set autoindent "自動縮進:每行的縮進值與上一行相等;noautoindent取消設置 set ai html
set cursorline "突出顯示當前行。java
set fileencodings=utf-8,gb18030,gbk,big5
set nu "行號python
set history=100000 "設置command和search歷史條數爲100000條,默認爲50條,vim8.0不支持?ios
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936 "設置編碼格式,encoding 選項用於緩存的文本、寄存器、Vim 腳本文件等;fileencoding 選項是 Vim 寫入文件時採用的編碼類型;termencoding 選項表示輸出到終端時採用的編碼類型。
set termencoding=utf-8
set encoding=utf-8git
set mouse=a "Vim編輯器裏默認是不啓用鼠標的,經過此設置便可啓動鼠標。
set selection=exclusive
set selectmode=mouse,keygithub
colorscheme bluegolang
輸入前幾個字母后,按up鍵,快捷查找歷史命令:Enter the first letters of your previous command and push <Up> arrow.
centos7中用雙引號作註釋
如下未驗證:
syntax enable
syntax on
colorscheme desert
filetype plugin indent on
set completeopt=longest,menu
set cst
set csto=1
set cscopequickfix=s-,c-,d-,i-,t-,e-,f-
" cs add /home/yangxl/readcode/cscope-kernel/cscope.out
" cs add /home/yangxl/readcode/cscope-app/cscope.out
let Tlist_Enable_Fold_Column = 0
let Tlist_WinWidth = 30
let Tlist_Show_One_File = 1
let g:miniBufExplMapCTabSwitchBufs = 1
let g:miniBufExplMapWindowNavVim = 1
let g:miniBufExplMapWindowNavArrows = 1
let g:winManagerWindowLayout='FileExplorer|TagList'
let g:SuperTabRetainCompletionType=2
nmap wm :WMToggle<cr>
set tabstop=4
"nmap <F2> :cs find d <C-R><C-W><CR>
"nmap <F3> :cs find c <C-R><C-W><CR>
"nmap <F4> :cs find t <C-R><C-W><CR>
"nmap <F5> :cs find e <C-R><C-W><CR>
"nmap <F6> :cs find f <C-R><C-W><CR>
"nmap <F7> :cs find i <C-R><C-W><CR>
nmap <F5> :TlistToggle <CR>
nmap <F2> :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <F3> :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <F4> :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <F6> :cs find f
nmap <C-n> :cn<CR>
nmap <C-p> :cp<CR>
"nmap :cs find t <C-R>=expand("<cword>")<CR><CR>
"nmap :cs find e <C-R>=expand("<cword>")<CR><CR>
"nmap :cs find f <C-R>=expand("<cfile>")<CR><CR>
"nmap :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
"nmap :cs find d <C-R>=expand("<cword>")<CR><CR>
" Using 'CTRL-spacebar' then a search type makes the vim window
" split horizontally, with search result displayed in
" the new window.
"nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
"nmap <C-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
"nmap <F2> :scs find d <C-R>=expand("<cword>")<CR><CR>
" Hitting CTRL-space *twice* before the search type does a vertical
" split instead of a horizontal one
"nmap <C-Space><C-Space>s
\:vert scs find s <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space><C-Space>g
\:vert scs find g <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space><C-Space>c
\:vert scs find c <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space><C-Space>t
\:vert scs find t <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space><C-Space>e
\:vert scs find e <C-R>=expand("<cword>")<CR><CR>
"nmap <C-Space><C-Space>i
\:vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
"nmap <F2>
\:vert scs find d <C-R>=expand("<cword>")<CR><CR>
set mouse=a
set autoindent
set cindent
filetype plugin indent on
"打開文件類型檢測, 加了這句才能夠用智能補全
set completeopt=longest,menu
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""新文件標題
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java文件,自動插入文件頭
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
""定義函數SetTitle,自動插入文件頭
func SetTitle()
"若是文件類型爲.sh文件
if &filetype == 'sh'
call setline(1,"\#########################################################################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: genglut")
call append(line(".")+2, "\# Mail: genglut@163.com")
call append(line(".")+3, "\# Created Time: ".strftime("%c"))
call append(line(".")+4, "\#########################################################################")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1, "/*************************************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Author: genglut")
call append(line(".")+2, " > Mail: genglut@163.com")
call append(line(".")+3, " > Created Time: ".strftime("%c"))
call append(line(".")+4, " ************************************************************************/")
call append(line(".")+5, "")
endif
if &filetype == 'cpp'
call append(line(".")+6, "#include<iostream>")
call append(line(".")+7, "using namespace std;")
call append(line(".")+8, "")
endif
if &filetype == 'c'
call append(line(".")+6, "#include<stdio.h>")
call append(line(".")+7, "")
endif
" if &filetype == 'java'
" call append(line(".")+6,"public class ".expand("%"))
" call append(line(".")+7,"")
" endif
"新建文件後,自動定位到文件末尾
autocmd BufNewFile * normal G
endfunc
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 顯示相關
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"set shortmess=atI " 啓動的時候不顯示那個援助烏干達兒童的提示
"winpos 5 5 " 設定窗口位置
"set lines=40 columns=155 " 設定窗口大小
"
set go= " 不要圖形按鈕
"color asmanian2 " 設置背景主題
"set guifont=Courier_New:h10:cANSI " 設置字體
"syntax on " 語法高亮
"
"autocmd InsertLeave * se nocul " 用淺色高亮當前行
"autocmd InsertEnter * se cul " 用淺色高亮當前行
set ruler " 顯示標尺
set showcmd " 輸入的命令顯示出來,看的清楚些
"set cmdheight=1 " 命令行(在狀態行下)的高度,設置爲1
"set whichwrap+=<,>,h,l " 容許backspace和光標鍵跨越行邊界(不建議)
"set scrolloff=3 " 光標移動到buffer的頂部和底部時保持3行距離
"
set novisualbell " 不要閃爍(不明白)
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "狀態行顯示的內容
set laststatus=1 " 啓動顯示狀態行(1),老是顯示狀態行(2)
set foldenable " 容許摺疊
set foldmethod=manual " 手動摺疊
"set background=dark "背景使用黑色
"
set nocompatible "去掉討厭的有關vi一致性模式,避免之前版本的一些bug和侷限
" 顯示中文幫助
if version >= 603
set helplang=cn
set encoding=utf-8
endif
" 設置配色方案
"colorscheme murphy
"字體
"if (has("gui_running"))
" set guifont=Bitstream\ Vera\ Sans\ Mono\ 10
"endif
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"鍵盤命令
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
nmap <leader>w :w!<cr>
nmap <leader>f :find<cr>
" 映射全選+複製 ctrl+a
map <C-A> ggVGY
map! <C-A> <Esc>ggVGY
map <F12> gg=G
" 選中狀態下 Ctrl+c 複製
vmap <C-c> "+y
"去空行
nnoremap <F2> :g/^\s*$/d<CR>
"比較文件
nnoremap <C-F2> :vert diffsplit
"新建標籤
map <M-F2> :tabnew<CR>
"列出當前目錄文件
map <F3> :tabnew .<CR>
"打開樹狀文件目錄
map <C-F3> \be
"C,C++ 按F5編譯運行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "! ./%<"
elseif &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'sh'
:!./%
elseif &filetype == 'py'
exec "!python %"
exec "!python %<"
endif
endfunc
"C,C++的調試
map <F8> :call Rungdb()<CR>
func! Rungdb()
exec "w"
exec "!g++ % -g -o %<"
exec "!gdb ./%<"
endfunc
Vim學習筆記
單線撤銷
在Normal mode下使用u
命令,或者在Command mode下使用:undo
命令,能夠撤銷上一次的操做。
使用U
命令,能夠撤銷全部針對當前行最近所作的修改。
Vim能夠進行屢次撤銷,這個次數是由選項undolevels來指定的。例如咱們可使用如下命令,設置撤消次數爲5000:
:set undolevels=5000
若是但願重作被撤銷的操做,可使用:redo
或CTRL-R
命令。
分支撤銷
如下述操做爲例:新建文件並輸入「大象」,而後在新的一行中輸入「小牛」,返回Normal mode並按下u
命令。這時輸入「小牛」的操做被撤消,文件將只包含「大象」。接着輸入「猩猩」,而後返回Normal mode並按下u
命令,此時將撤消輸入「猩猩」的操做,文件仍然只包含「大象」。因此你的「小牛」就再也找不回來了。而撤消分支(Undo branches)就能夠解決這個問題。使用g-
可使文件從新包含入「大象」和「小牛」。此過程以下圖所示:
![Undo Branches](http://static.javashuo.com/static/loading.gif)
若是你先撤銷了若干改變,而後又進行了一些其它的改變。此時,被撤銷的改變就成爲一個分支。咱們可使用:undolist
命令查看修改的各個分支。
![UndoBranch_list](http://static.javashuo.com/static/loading.gif)
- "編號" 列是改變號。這個編號持續增長,用於標識特定可撤銷的改變。
- "改變" 列是根結點到此葉結點所需的改變數目。
- "時間" 列是此改變發生的時間。
使用:undo
命令並指定編號作爲參數,則可以撤銷到某個分支。
根據撤消分支,使用g-
命令可以回到較早的文本狀態;而g+
命令則返回較新的文本狀態。
咱們還能夠根據時間撤消操做:使用:earlier 10m
命令退回到10分鐘前的文本狀態。也能夠用:later 5s
命令跳轉到5秒之後的編輯狀態。命令參數中的"s"表明秒,"m"表明分鐘,"h"表明小時。
命令小結
u |
撤消 |
:undo |
CTRL-R |
重作 |
:redo |
:undolist |
查看撤消分支 |
g- |
返回較早的文本狀態 |
g+ |
返回較新的文本狀態 |
:earlier |
退回到指定時間前的文本狀態 |
:later |
退回到指定時間後的文本狀態 |
Technorati Tags: vi,vim,gvim
手動縮進
在Normal Mode下,命令>>
將對當前行增長縮進,而命令<<
則將對當前行減小縮進。咱們能夠在命令前使用數字,來指定命令做用的範圍。例如如下命令,將減小5行的縮進:
5<<
在Insert/Replace Mode下,Ctrl-Shift-t能夠增長當前行的縮進,而Ctrl-Shift-d則能夠減小當前行的縮進。使用0-Ctrl-Shift-d命令,將移除全部縮進。須要注意的是,當咱們輸入命令中的「0」時,Vim會認爲咱們要在文本中插入一個0,並在屏幕上顯示輸入的「0」;而後當咱們執行命令0-Ctrl-Shift-d時,Vim就會意識到咱們要作的是減小縮進,這時0會就會從屏幕上消失。
縮進寬度默認爲8個空格。咱們可使用如下命令,來修改縮進寬度:
:set shiftwidth=4
經過如下設置,每次點擊Tab鍵,將增長寬度爲8列的Tab縮進。
:set tabstop=8
:set softtabstop=8
:set shiftwidth=8
:set noexpandtab
使用如下設置,每次點擊Tab鍵,增長的縮進將被轉化爲4個空格。
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
其中,expandtab選項,用來控制是否將Tab轉換爲空格。可是這個選項並不會改變已經存在的文本,若是須要應用此設置將全部Tab轉換爲空格,須要執行如下命令:
:retab!
自動縮進
在Vim中還能夠進行自動縮進,主要有cindent、smartindent和autoindent三種。
cindent Vim能夠很好的識別出C和Java等結構化程序設計語言,而且能用C語言的縮進格式來處理程序的縮進結構。可使用如下命令,啓用cindent縮進結構:
:set cindent
smartindent 在這種縮進模式中,每一行都和前一行有相同的縮進量,同時這種縮進形式能正確的識別出花括號,當遇到右花括號(}),則取消縮進形式。此外還增長了識別C 語言關鍵字的功能。若是一行是以#開頭的,那麼這種格式將會被特殊對待而不採用縮進格式。可使用如下命令,啓用smartindent縮進結構:
:set smartindent
autoindent 在這種縮進形式中,新增長的行和前一行使用相同的縮進形式。可使用如下命令,啓用autoindent縮進形式。
:set autoindent
命令小結
>> |
增長縮進 |
Ctrl-Shift-t |
<< |
減小縮進 |
Ctrl-Shift-d |
:set shiftwidth=n |
設置縮進寬度 |
:set cindent |
啓用cindent縮進結構 |
:set autoindent |
啓用autoindent縮進結構 |
:set smartindent |
啓用smartindent縮進結構 |
Technorati Tags: vi,vim,gvim
將寄存器與各類刪除、複製、粘貼命令組合使用,可以大大提升編輯文本的效率。
指定寄存器
在複製或刪除文本時,可使用"register
命令將文本放入指定的寄存器中。例如如下命令,將複製的文本放到寄存器a中,同時文本也會被放入未命名寄存器中。
"ayy
若是再使用相應的大寫字母來指定寄存器,那麼會將當前行內容追加到寄存器a中,這時該寄存器中就有了兩行文本。
"Ayy
查看寄存器
使用registers命令,能夠查看特定寄存器中的內容。例如如下命令,能夠查看寄存器a中的內容:
![register_A](http://static.javashuo.com/static/loading.gif)
若是想要查看全部寄存中的內容,可使用如下命令:
:registers
寄存器類別
寄存器能夠分爲如下9類:
類別 |
符號 |
描述 |
未命名寄存器 |
" |
上一次複製或刪除的文本 |
數字寄存器 |
0-9 |
文本刪除歷史 |
短刪除寄存器 |
- |
刪除少於一行的文本 |
命名寄存器 |
a-z,A-Z |
存放文本 |
只讀寄存器 |
% |
當前文件的名字 |
# |
交替文件的名字 |
. |
上一次插入的文本 |
: |
上一次執行的命令 |
表達式寄存器 |
= |
返回表達式結果 |
選擇和拖拽寄存器 |
* |
系統剪切板 |
+ |
系統剪切板(X11) |
~ |
拖拽的文本 |
黑洞寄存器 |
_ |
永久刪除的文本 |
搜索模式寄存器 |
/ |
搜索模式 |
未命名寄存器(The Unnamed Register) 當使用y命令複製文本,或使用d、c、s、x命令刪除文本時,文本將自動被放入""未命名寄存器。即便你在複製或刪除文本時,已經指定了寄存器(例如使用"xdd命令),這些文本也將會被同時放入"x和""寄存器。
數字寄存器(The Numbered Registers) "0始終存放最近刪除的文本。"1也 包含上次刪除的文本。區別在於:"0不斷被刪除的文本所覆蓋;而若是刪除文本時,指定了寄存器或者文本小於一行,那麼"1將不會被更新。 數字寄存器1-9能夠看做是刪除歷史, 你能夠從中找到早先刪除的文本。好比你使用了三次dd命令,那麼這三行文本被分別存放在寄存器1,2,3中,能夠經過命令"1P
,"2P
,"3P
將這些文本再粘貼回來。
短刪除寄存器(The Small Delete Register) 當刪除少於一行的文本時,除非指定了某個寄存器,不然這些內容將會被放入"-短刪除寄存器中。
命名寄存器(The Named Registers) 當文本被放入以小寫字母命名的寄存器(例如"a)時,該寄存器原有的內容將被覆蓋;而使用以大寫字母命名的寄存器(例如"A)時,將會把文本追加到原有內容以後。
只讀寄存器(The Read-Only Registers) 你只能從4個只讀寄存器中粘貼內容,而不能放入文本。"%包含當前文件名;"#包含交替文件名;".包含最近插入的文本;":包含上次執行的命令行。
表達式寄存器(The Expression Register) 當咱們輸入"=,就會在Vim底部顯示一個以「=」開始的提示行,能夠在這裏輸入表達式並按回車鍵確認。隨後使用命令p
將表達式的結果粘貼到文本中。例如要在文本中插入38*56的值,首先進入命令模式,輸入"=
, 在屏幕底部的提示行中輸入「38*56」並按回車,而後輸入命令p,這樣就能夠將計算結果插入文本中了。在表達式寄存器中,不只可使用一般的算術運算 符,還可使用Vim特定的函數和運算符。例如經過表達式寄存器來獲得環境變量的值(例如"=$HOME)。若是沒有輸入任何表達式而直接按回車鍵,那麼 Vim將執行最近使用過的表達式。
選擇和拖拽寄存器(The Selection and Drop Registers) 有3個寄存器用於保存選中的文本:"*用於訪問系統剪切板。在Windows下,"*和"+相同;在Linux下,"+包含選中的文本,"*包含複製的文本。使用"+y
命令,能夠將當前選中的文文本複製到系統剪切板中。而"+p
命令,則能夠粘貼系統剪切板中的內容。經過剪切板寄存器,可以在不一樣的Vim編輯器或者是其餘應用程序之間,進行文本交換。"~包含上次從其它應用程序拖拽到Gvim中的文本。
黑洞寄存器(The Black Hole Register) 任何放入"_中的文本都將不復存在。若是想要永久刪除某些文本而不是將他放入1-9中的某個寄存中,就可使用黑洞寄存器。例如:命令dd將刪除一行文本並將其放入寄存器1中;而命令"_dd
則將該行文本放入黑洞寄存器中,這些文本也就會永久消失了,而寄存器1中的文本會保持不變。
搜索模式寄存器(Search Pattern Register) 當你經過/命令進行搜索時,所使用的模式將自動被放入"/寄存器。
粘貼寄存器
命令:put會將寄存中的內容粘貼到指定的文本行後面。使用如下命令,能夠將寄存器中的內容粘貼到第五行的後面:
:5put a
若是要將文本放在這一行的前面,能夠用如下命令:
:5put! a
你也可使用p命令,將x寄存中的文本粘貼到光標以後:
"xp
而P命令,則將x寄存中的文本粘貼到光標以前:
"xP
若是直接使用p
或P
命令,而沒有指明特定寄存器,那麼將粘貼未命名寄存器中的內容。
使用如下命令,能夠粘貼上次插入的文本,方便你錄入重複的內容:
".P
若是要粘貼系統剪切板中的內容,在Insert mode下能夠利用快捷鍵Shift+Ins,而在Normal mode下,可使用如下命令:
"*p
Technorati Tags: vi,vim,gvim
從版本7開始,Vim內置了拼寫檢查功能,可是在默認狀況下並無打開。
啓用
首先,你須要使用:echo &spelllang
命令確認當前使用哪一種語言。好比:「en」表明英語。若是想要改語言,可使用:set spelllang=en_GB.UTF-8
命令。
而後,你能夠經過菜單:工具 -> 拼寫檢查 -> 打開拼寫檢查,來啓用拼寫檢查功能。Vim將用紅色的波浪線標識出錯誤的拼寫。你也可使用:set spell
命令打開拼寫檢查,使用:set nospell
命令關閉拼寫檢查。
檢查
若是在文件中有不少拼寫錯誤,能夠用]s
命令移動到下一個拼寫錯誤處,用[s
命令移動到上一個拼寫錯誤處。
![SpellCheck_1](http://static.javashuo.com/static/loading.gif)
糾正
若是想要糾正錯誤的拼寫:首先將光標移至錯誤的單詞上,而後執行z=
命令列出一組相近的單詞,你能夠在其中選擇正確的拼寫。
![SpellCheck_2](http://static.javashuo.com/static/loading.gif)
有些特殊單詞(好比圖中的"Gvim")也會被標識爲錯誤拼寫,若是你但願Vim可以認可它們爲正確的拼寫,可使用zg
命令。還能夠用zw
命令取消用戶作的拼寫識別。
命令小結
:set spell |
啓用拼寫檢查 |
:set nospell |
關閉拼寫檢查 |
]s |
移動到下一個拼寫錯誤處 |
[s |
移動到上一個拼寫錯誤處 |
z= |
選擇正確的拼寫 |
zg |
添加用戶拼寫 |
zw |
刪除用戶拼寫 |
Technorati Tags: vi,vim,gvim
比較
能夠從命令行調用如下命令,來打開兩個文件進行比較:
vim -d file1 file2
若是已經打開了文件file1,那麼能夠在Vim中用如下命令,再打開另外一個文件file2進行比較:
:diffsplit file2
若是已經使用split打開了兩個文件,那麼能夠分別在兩個窗口裏面輸入如下命令,進行比較:
:diffthis
屏幕將被水平分隔,分別顯示一個文件,其中不一樣的部分將被高亮顯示。
- 只在某一文件中存在的行,顯示爲綠色;
- 在兩個文件中都存在的行,顯示爲紅色;
- 相同的行,沒有高亮顯示而且會被摺疊。
若是想要垂直比較兩個文件,可使用如下命令:
:vert diffsplit file2
![diff](http://static.javashuo.com/static/loading.gif)
摺疊
使用zo
命令,能夠展開被摺疊的相同的文本行;而zc
命令,則能夠從新摺疊相同的行。
查看
比較文件時,常常須要結合上下文來肯定最終要採起的操做。缺省狀況下,是會把不一樣之處上下各6行的文本顯示出來以供參考。其餘的相同的文本行被自動摺疊。若是但願修改缺省的上下文行數爲3行,可使用如下命令:
:set diffopt=context:3
滾動
若是你在一個文件中滾動屏幕,那麼另外一個文件也會自動滾動以顯示相同的位置。你可使用如下命令,取消聯動:
:set noscrollbind
更新
若是更改了某個文件的內容,vim又沒有自動更新diff檢查,那麼可使用以下命令更新:
:diffupdate
跳轉
你能夠用[c
命令;跳轉到前一個不一樣點;或者用]c
命令,跳轉到後一個不一樣點。
命令小結
:diffsplit |
分隔窗並比較文件 |
:diffthis |
比較文件 |
:diffupdate |
更新比較結果 |
zo |
展開 |
zc |
摺疊 |
[c |
跳轉到前一個不一樣點 |
]c |
跳轉到後一個不一樣點 |
Technorati Tags: vi,vim,gvim
在新建文件時,若是有針對該文件擴展名的模板存在,那麼模板中的內容,將被自動插入進新文檔中。
首先,建立模板文件(Skeleton Document)。例如,包含如下內容的XHTML 1.0 Strict模板。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<p></p>
</body>
</html>
注:你能夠從Web Standards Project得到更多類型的HTML/XHTML模板。
而後,將模板以正確的擴展名,保存至Vim的skel目錄中。若是沒有skel目錄,則須要手工建立。在Windows中,將模板Template.html保存到C:\Program Files\Vim\vimfiles\skel目錄下;而在Mac/Liunx/Unix中,則保存模板爲~/.vim/skel/Template.html。
最後,vimrc文件中,添加如下命令:
Windows:
autocmd! BufNewFile * silent! 0r $VIM/vimfiles/skel/Template.%:e
Mac/Liunx/Unix:
autocmd! BufNewFile * silent! 0r ~/.vim/skel/Template.%:e
當你使用:new test.html
命令新建一個HTML文檔時,模板中的代碼就會被自動添加到新建的頁面中。這無疑,很是便於咱們建立標準化的網頁。
Technorati Tags: vi,vim,gvim
折行顯示
在默認狀況下,Vim會自動折行––將超出屏幕範圍的文本打斷並顯示在下一行。咱們也能夠經過如下命令,取消自動折行––超出屏幕範圍的文本將不會被顯示,你須要向句末移動光標,以使屏幕水平滾動,查看一行的完整內容。
:set nowrap
可使用如下命令,恢復Vim的自動折行:
:set wrap
折行形式
咱們能夠告訴Vim在合適的地方折行:
:set linebreak
所謂合適的地方,是由breakat選項中的字符來肯定的。在默認的狀況下,這些字符是「^I!@*-+_;:,./?」。若是咱們不但願在下劃線處打斷句子,只要用下面的命令將「_」從這個列表移除就能夠了:
:set breakat-=_
若是一行被打斷,Vim可能不會在句子鏈接處顯示任何內容。咱們能夠經過設置showbreak選項,來顯示所但願的指示信息:
:set showbreak=->
咱們可使用如下命令,取消自定義折行:
:set nolinebreak
命令小結
:set wrap |
啓用自動折行 |
:set nowrap |
取消自動折行 |
:set linebreak |
自定義折行 |
Technorati Tags: vi,vim,gvim
換行方式
在早期的打印機時代,開始新的一行要佔用兩個字符的時間。若是到了一行的結尾處,你要快速回到新的一行的開頭,須要打印針頭在紙面上飛快地掠過,常 常會在紙面上留下污點。解決這個問題的辦法就是,用兩個字符:一個字符<Return>來移到第一列,另外一個字符<Line feed>來新增一行。計算機產生之後,存儲較爲昂貴,在如何解決回車換行這個老問題上,人們產生了不一樣的意見。UNIX人認爲在到達一行的結尾時 新增一行<Line feed> (LF),而Mac人則認同<Return> (CR)的解決辦法,MS則堅持古老的<Return><Line feed> (CRLF)的方法。這就意味着若是你將一個文件從一個系統轉移到另外一個系統,就面臨着回車換行的問題。而Vim編輯器則會自動的認出這種文件格式方面的 區別,並作出相應處理。
fileformats選項,用於處理文件格式問題。如下命令,告訴vim將UNIX文件格式作爲第一選擇,而將MS-DOS的文件格式作爲第二選擇:
:set fileformats=unix,dos
檢測到的文件格式會被存放在fileformat選項中,咱們能夠用如下命令來查詢:
:set fileformat?
咱們還能夠利用fileformat選項,來轉換種文件格式。例如,使用如下命令將名爲readme.txt的MS-DOS格式的文件,轉換爲UNIX格式的文件。
:set fileformat=unix
在默認狀況下,Vim認爲文件是由行組成的,而且文件最後一行是以<EOL>爲結束符的。若是你想設置文件以<EOL>結束符結尾,則能夠用如下命令:
:set endofline
若是你想設置文件不以<EOL>結束符來結尾,則可使用如下命令:
:set noendofline
顯示換行
若是你使用如下命令進入<list mode>,那麼就能夠清楚的看到以「$」表示的換行符和以「^I」表示的製表符。
:set list
![line_feed](http://static.javashuo.com/static/loading.gif)
你可使用如下命令退出<list mode>:
:set nolist
刪除換行
能夠用如下命令刪除換行符:
:%s/\n//g
能夠用如下命令刪除DOS文件中的回車符「^M」:
:%s/\r//g
能夠用如下命令轉換DOS回車符「^M」爲真正的換行符:
:%s/\r/\r/g
能夠用如下命令刪除行尾的空格以及DOS回車符。它沒有使用「/」字符做爲替換命令各個參數間的分隔符,而是使用了「#」字符。命令還使用了「\?」正則表達式,用來匹配它前面出現的字符0次或1次。
:%s#\s*\r\?$##
能夠用如下命令刪除三行空行:
:%s/^\n\{3}//
能夠用如下命令將連續的兩個空行替換成一個空行:
:%s/\n\n/\r/g
自動換行
在默認狀況下,Vim是不會自動換行的,也就是說咱們須要本身決定回車的位置。可是咱們也能夠經過指定textwidth選項,讓Vim自動在指定 位置換行。例如,使用如下命令指定在30列時自動換行。因爲在遇到空格時纔會自動換行,因此換行的精確位置可能會小於你指定的列寬。
:set textwidth=29
而如下命令告訴Vim從右面算起當達到10個字符的空格時要換行:
:set wrapmargin=10
在指定了文本寬度的狀況下,當咱們將一行中的前幾個文字刪掉時,Vim並不會將後面行中的文本移動上來,而是造成了一些長短不一的段落,這樣看起來不是很好。能夠有幾種方法處理這個問題:
一種方法是,在可視化模式下選中這些文本,而後用gp
命令來格式化選中的段落。另外一種方法是,使用gqmotion
命令來完成格式。例如要格式化5行,就能夠用命令:gq4j
。這個命令告訴Vim要格式化本行,同時要格式化下面的4行,這樣就達到了格式化5行的目的。若是要格式化整個段落,能夠將光標放在段落的第一行上,而後執行命令gq}
。而使用命令gqip
能夠格式化當前段落,並且並沒必要要將光標放在段落的第一行上。
![line_feed_gq](http://static.javashuo.com/static/loading.gif)
若是要想格式化一行,可使用命令gqgq
,也能夠簡記爲gqq
。
注意:選項textwidth優先於wrapmargin。若是要使wrapmargin選項生效,必須將textwidth設置爲0(這也是默認值)。
合併行
命令J
使兩行合併爲一行,同時用空格分隔這兩行。
經過設置joinspace選項,能夠控制合併兩行時的分隔符(若是一行是以標點符號來結尾)。若是設置:set nojoinspaces
,用J命令合併兩行時會用一個空格來分隔;若是設置:set joinspaces
,用J命令合併兩行時會用兩個空格來分隔。若是不但願用空格來分隔合併的行,可使用gJ
命令。
咱們也可使用:join
命令,將幾行合併爲一行並使用空格來分隔各行。若是不但願加入空格,那麼可使用:join!
命令。
命令小結
:set fileformat |
設置文件格式 |
:set endofline |
設置文件結束符 |
:set noendofline |
取消文件結束符 |
:set list |
進入List Mode |
:set nolist |
退出List Mode |
:%s/\n//g |
刪除換行符 |
:set textwidth |
設置行寬 |
:set textwidth |
設置行邊距 |
:join |
合併多行 |
J |
合併兩行 |
Technorati Tags: vi,vim,gvim
在Vim中,有四個與編碼有關的選項:「fileencodings (fencs)」、「fileencoding (fenc)」、「encoding (enc)」和「termencoding (tenc)」。在實際使用中,任何一個選項出現錯誤,都會致使出現亂碼。
encoding
encoding是Vim內部使用的字符編碼方式。當咱們設置了encoding以後,Vim內部全部的buffer、寄存器、腳本中的字符串等, 全都使用這個編碼。若是編碼方式與Vim的內部編碼不一致,它會先把編碼轉換成內部編碼。若是編碼中含有沒法轉換爲內部編碼的字符,那麼這些字符就會丟 失。所以,在選擇Vim內部編碼的時候,必定要使用一種表現能力足夠強的編碼,以避免影響正常工做。因爲encoding選項涉及到Vim中全部字符的內部 表示,所以只能在Vim啓動的時候設置一次。在Vim工做過程當中修改encoding 會形成很是多的問題。
建議將encoding設置爲utf-8。爲了不在非UTF-8的系統(如Windows)下,菜單和系統提示出現亂碼,可同時作這如下幾項設置:
set encoding=utf-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
固然,你也能夠設置菜單和信息都顯示爲英文,這樣也能夠避免Vim程序界面亂碼的問題:
set langmenu=en_US
let $LANG = 'en_US'
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
termencoding
termencoding是Vim用於屏幕顯示的編碼。在顯示的時候,Vim會把內部編碼轉換爲屏幕編碼,再用於輸出。內部編碼中含有沒法轉換爲屏 幕編碼的字符時,該字符會變成問號,但不會影響對它的編輯操做。若是termencoding沒有設置,則直接使用encoding而不進行轉換。
例如,你在Windows下經過telnet登陸Linux工做站時,因爲Windows的telnet是GBK編碼的,而Linux則使用 UTF-8編碼,所以telnet下的Vim中就會亂碼。此時有兩種消除亂碼的方式:你能夠將Vim的encoding改成gbk,或者保持 encoding爲utf-8,而將termencoding改成gbk。顯然,使用前一種方法時,若是編輯的文件中含有GBK沒法表示的字符時,這些字 符就會丟失。但若是使用後一種方法,雖然因爲終端所限,這些字符沒法顯示,但在編輯過程當中這些字符並不會丟失。
你能夠利用如下命令設置termencoding:
set termencoding=utf-8
對於圖形界面下的GVim,它的顯示不依賴TERM,所以termencoding對於它沒有意義。在GTK2下的GVim中,termencoding永遠是utf-8,而且不能修改。而Windows下的GVim則忽略termencoding的存在。
fileencoding
當Vim從磁盤上讀取文件時,會對文件編碼進行探測。若是文件的編碼方式和Vim的內部編碼方式不一樣,Vim就會對編碼進行轉換。轉換完畢 後,Vim會將fileencoding選項設置爲文件的編碼。當Vim存盤時,若是encoding和fileencoding不一致,Vim就會進行 編碼轉換。所以,經過打開文件後設置fileencoding,能夠將文件由一種編碼轉換爲另外一種編碼。
set fileencoding=utf-8
由於Vim是在打開文件時,自動探測和設置fileencoding的,因此,若是出現亂碼,就沒法經過在打開文件後從新設置fileencoding來糾正亂碼。
fileencodings
編碼的自動識別,是經過設置fileencodings實現的。fileencodings是一個用逗號分隔的列表,列表中的每一項是一種編碼的名 稱。當咱們打開文件時,Vim按順序使用fileencodings中的編碼進行嘗試解碼,若是成功的話,就使用該編碼方式進行解碼,並將 fileencoding設置爲這個值;若是失敗的話,就繼續檢驗下一個編碼。 所以,咱們在設置fileencodings時,必定要把嚴格的編碼方式放在前面,把寬鬆的編碼方式放在後面。例如,latin1是一種很是寬鬆的編碼方 式,任何一種編碼方式獲得的文本,用latin1進行解碼,都不會發生解碼失敗。固然,解碼獲得的結果也極可能會是亂碼。所以,若是你把latin1放到 fileencodings的第一位,那麼打開任何中文文件都會顯示亂碼了。推薦使用如下fileencodings設置:
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,latin1
其中, ucs-bom 是一種很是嚴格的編碼,非該編碼的文件幾乎沒有可能被誤判爲ucs-bom,所以放在第一位。utf-8 也至關嚴格,除了很短的文件以外也是幾乎不可能被誤判的,所以放在第二位。接下來是 cp93六、gb18030、big5 這些編碼相對寬鬆的編碼。 而最爲寬鬆的 latin1 編碼,則放在列表的最後。
若是編碼被誤判了,解碼後的結果就沒法識別了,也就顯示成咱們所說的亂碼。此時,若是你知道這個文件的正確編碼,能夠把fileencodings改爲只有這一種編碼,阻止任何 fall-back 發生,而後從新打開這個文件。
編碼轉換
當咱們看到相似「突然」的編碼時,能夠經過如下命令將&#後的數字,經由函數nr2char()轉換爲可讀的文字:
:%s/&#\([0-9]\+\);/\=nr2char(submatch(1))/g
命令小結
set encoding |
設置Vim的內部編碼方式 |
set termencoding |
設置Vim的屏幕顯示編碼 |
set fileencoding |
設置文件的編碼方式 |
set fileencodings |
設置Vim的解碼列表 |
Technorati Tags: vi,vim,gvim
默認的狀態行,左側顯示當前打開的文件名,右側顯示當前所處的行列位置。當你執行Vim命令時,狀態行將消失並顯示命令輸入及輸出。
一般狀態行用反色顯示。你能夠經過修改highlight選項中的s字符來改變。例如,sb設置爲粗體字。若是狀態行沒有啓用高亮 (sn),那麼字符^表示當前窗口,字符=表示其它窗口。若是支持鼠標而且已經經過設置mouse選項使之啓動,那麼你能夠用鼠標拖動狀態行以改變窗口的 大小。
定製狀態行
咱們可使用如下命令來定義狀態行:
:set statusline format
例以下面的命令:
:set statusline=The file is"%f"
其中,%用來指明一個特殊區域。例如%f,將在狀行中包含文件名。
選項包含printf風格的%項目,中間能夠間雜普通文本。內容默認爲右對齊,若是但願左對齊,那麼能夠在%後面加上-。數字內容是忽略開頭0顯示的,若是須要顯示前導0,那麼能夠在%後加上一個"0"。單個百分號能夠用"%%"給出。最多可給出80個項目。
若是此選項以 "%!" 開始,它用做表達式。計算此表達式的結果用做選項值。
參數列表
%(...%) |
定義一個項目組。 |
%{n}* |
%對其他的行使用高亮顯示組Usern,直到另外一個%n*。數字n必須從1到9。用%*或%0*能夠恢復正常的高亮顯示。 |
%< |
若是狀態行過長,在何處換行。缺省是在開頭。 |
%= |
左對齊和右對齊項目之間的分割點。 |
% |
字符% |
%B |
光標下字符的十六進制形式 |
%F |
緩衝區的文件完整路徑 |
%H |
若是爲幫助緩衝區則顯示爲HLP |
%L |
緩衝區中的行數 |
%M |
若是緩衝區修改過則顯示爲+ |
%N |
打印機頁號 |
%O |
以十六進制方式顯示文件中的字符偏移 |
%P |
文件中光標前的% |
%R |
若是緩衝區只讀則爲RO |
%V |
列數。若是與%c相同則爲空字符串 |
%W |
若是窗口爲預覽窗口則爲PRV |
%Y |
緩衝區的文件類型,如vim |
%a |
若是編輯多行文本,這個字行串就是({current} of {arguments}),例如:(5 of 18)。若是在命令行中只有一行,這個字符串爲空 |
%b |
光標下的字符的十進制表示形式 |
%c |
列號 |
%f |
緩衝區的文件路徑 |
%h |
若是爲幫助緩衝區顯示爲[Help] |
%l |
行號 |
%m |
若是緩衝區已修改則表示爲[+] |
%n |
緩衝區號 |
%o |
在光標前的字符數(包括光標下的字符) |
%p |
文件中所在行的百分比 |
%r |
若是緩衝區爲只讀則表示爲[RO] |
%t |
文件名(無路徑) |
%v |
虛列號 |
%w |
若是爲預覽窗口則顯示爲[Preview] |
%y |
緩衝區的文件類型,如[vim] |
%{expr} |
表達式的結果 |
顯示狀態行
即便已經使用以上命令設置選項,狀態行仍是保持原樣,這是由於Vim在默認狀況下是不顯示狀態行的,而僅顯示命令緩衝區等極少的信息。咱們可使用如下命令,將狀態行顯示在窗口底部倒數第二行:
:set laststatus=2
你也可使用如下命令,移去狀態行:
:set laststatus=0
狀態行實例
利用如下命令,能夠在狀態行中顯示:當前文件名,文件格式(DOS, Unix),文件類型 (XHTML),當前位置和文件總行數。
:set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%04l,%04v][%p%%]\ [LEN=%L]
實際效果以下圖所示:
![statusline_1](http://static.javashuo.com/static/loading.gif)
除了顯示的內容,你還可使用如下命令定義顯示的顏色。
:set statusline=%2*%n%m%r%h%w%*\ %F\ %1*[FORMAT=%2*%{&ff}:%{&fenc!=''?&fenc:&enc}%1*]\ [TYPE=%2*%Y%1*]\ [COL=%2*%03v%1*]\ [ROW=%2*%03l%1*/%3*%L(%p%%)%1*]\
須要使用如下命令,自定義高亮顯示顏色。
hi User1 guifg=gray
hi User2 guifg=red
hi User3 guifg=white
實際效果以下圖所示:
![statusline_Color](http://static.javashuo.com/static/loading.gif)
你還能夠經過在_vimrc文件中包括如下命令,使狀態行根據狀態的不一樣,顯示不一樣的顏色。
function! InsertStatuslineColor(mode)
if a:mode == 'i'
hi statusline guibg=peru
elseif a:mode == 'r'
hi statusline guibg=blue
else
hi statusline guibg=black
endif
endfunction
au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertLeave * hi statusline guibg=orange guifg=white
hi statusline guibg=black
以下圖所示,狀態行的文件名部分,在插入狀態時顯示爲橘色背景,這樣就能很明顯地提醒咱們所處的狀態:
![statusline_Mode](http://static.javashuo.com/static/loading.gif)
命令小結
:set statusline format |
定製狀態行 |
:set laststatus |
顯示/取消狀態行 |
Technorati Tags: vi,vim,gvim
拷貝
使用傳統的Vi風格命令在不一樣窗口之間拷貝文本,可使用以下方法:
- 編輯第一文件
- 執行命令
:split second_file
打開另外一個窗口並開始編輯第二個文件
- 使用命令
ctrl+Wp
回到含有原始文件的前一個窗口
- 將光標移動到要拷貝文本的第一行
- 用命令
ma
標記這一行
- 移動到要拷貝文本的最後一行
- 執行命令
y'a
來複制當前光標位置到所作標記之間的文本
- 使用命令
ctrl+Wp
回到將要放置文本的文件
- 將光標移到將要插入文本的地方
- 使用命令
P
將複製的文本粘貼到文件中
使用可視化方式在不一樣窗口之間拷貝文本,可使用以下方法:
- 編輯第一文件
- 執行命令
:split second_file
打開另外一個窗口並開始編輯第二個文件
- 使用命令
ctrl+Wp
p回到含有原始文件的前一個窗口
- 將光標移動到要拷貝文本的第一行
- 執行命令
V
進入可視化模式
- 移動到將要複製文本的最後一行,被選中的文本將會被高亮顯示
- 執行命令
y
複製選中的文本
- 使用命令
ctrl+Wp
回到將要放置文本的文件
- 使用命令
P
將複製的文本粘貼到文件中
讀取
使用:read filename
命令,可讀進一個文件並將內容插在當前行的後面。
寫入
命令:write
用來寫入文件,能夠保存當前文件。咱們也能夠用命令:write newfile
將 當前的文件內容寫入一個新的文件。通常狀況下:write命令並不會覆蓋已經存在的文件。咱們能夠用強制操做(!)選項,來覆蓋已經存在的文件。而這個命 令對於分拆文件也頗有用。能夠用可視化模式選定一個範圍,而後將這個選定的範圍寫入新的文件,從而實現分拆文件的目的。
命令:write >> logfile
將文本寫入到目標文件的末尾。這樣實現了文件添加功能,免去了拷貝,編輯的過程。
命令:wall
能夠保存全部已經修改過的文件(包括隱藏緩衝區中的文件)。
退出
:quit
能夠退出當前文件。若是同時打開了多個窗口,能夠用:qall
命令退出全部文件。若是文件進行了修改可是沒有保存,在執行這個命令時會給出警告信息。若是想要放棄所作的修改而強行退出,可使用:qall!
命令。咱們還能夠將這個兩個命令進行組合,實現對全部文件的保存並退出的命令:wqall
。
參數/緩衝區/窗口 命令對照
參數和緩衝區命令對照
:next |
切換到下一文件 |
:bnext |
:previous |
切換到上一文件 |
:bprevious |
:Next |
:bNext |
:first |
切換到第一個文件 |
:bfirst |
:last |
切換到最後一個文件 |
:blast |
:args |
顯示正在編輯的文件名 |
:buffers |
:argument [N] |
切換至第N號文件 |
:buffer [N] |
緩衝區和窗口命令對照
:snext |
分割並切換到下一文件 |
:sbnext |
:sprevious |
分割並切換到上一文件 |
:sbprevious |
:sNext |
:sbNext |
:sfirst |
切換到第一個文件 |
:sbfirst |
:slast |
分割並切換到最後一個文件 |
:sblast |
:sall |
分割並顯示全部文件 |
:sball |
:sargument [N] |
分割並切換至第N號文件 |
:sbuffer [N] |
Technorati Tags: vi,vim,gvim
你能夠在啓動vi時,指定多個文件作爲參數,例如vi file1 file2 file3,這樣就能夠編輯多個文件了。在默認狀況下,vi將顯示第一個文件。
須要切換到下一個文件時,能夠輸入:next
命令,若是你沒有保存當前文件的修改,vi將給出提示信息,不容許你切換到下一文件。這時能夠輸入:write
和:next
命令,保存並切換到第二個文件。此命令也可簡寫爲:wnext
。使用:next!
命令也能夠強制切換到第二個文件,固然這樣你所作的改動也將會丟失。爲了不這種狀況,咱們能夠用:set autowrite
命令,打開vi的自動保存功能。相應的,關閉自動保存命令爲:set noautowrite
。
若是想要回到上一個文件,可使用:previous
或是:Next
命令。若是你要保存當前文件並切換到前一文件,可使用:wprevious
或是:wNext
命令。
咱們能夠用:first
或者:rewind
命令快速切換到第一個文件;也能夠用:last
命令快速切換到最後一個文件。
如何肯定咱們在編輯哪個文件呢?能夠注意一下文件的標題。那裏應該顯示相似"(2 of 3)" 的字樣。這表示你正在編輯三個文件中的第二個。命令:args
能夠顯示咱們所打開的文件,並用中括號標識出正在編輯的文件。
![args](http://static.javashuo.com/static/loading.gif)
若是咱們在一個文件中進行一些改動,再切換到另外一個文件中進編輯,這時就能夠用ctrl+^來切換這兩個文件。
命令小結
:next |
切換到下一文件 |
:wnext |
保存後切換到下一文件 |
:previous |
切換到上一文件 |
:Next |
:wprevious |
保存後切換到上一文件 |
:wNext |
:first |
切換到第一個文件 |
:last |
切換到最後一個文件 |
:set autowrite |
打開自動保存功能 |
:set noautowrite |
關閉自動保存功能 |
:args |
顯示正在編輯的文件名 |
:argument [N] |
切換至第N號文件 |
Technorati Tags: vi,vim,gvim
窗口(Window)被用來查看緩衝區(Buffer)裏的內容。你能夠用多個窗口察看同一個緩衝區,也能夠用多個窗口察看不一樣的緩衝區。
Vim主窗口能夠容納多個分割的窗口。此外還有標籤頁(tab-page),每一個標籤頁也能容納多個窗口。
在默認狀況下,與Vi相似,Vim啓動後只打開一個窗口。參數 "-o" 和 "-O" 可讓Vim爲參數列表裏的每個文件打開一個窗口。參數 "-o" 水平分割窗口;參數 "-O" 垂直分割窗口。若是 "-o" 和 "-O" 都用了,那麼最後一個參數決定分割的方向。例如,下面的例子打開三個水平分割的窗口。
vim -o file1 file2 file3
分割窗口
:split
命令,會將當前窗口平分爲兩個。而且在這兩個窗口中同時顯示當前文件。若是你在其中一個窗口進行編輯,那麼另外一個窗口也會同步顯示出你所作的工做。
咱們一般並非要在兩個窗口中顯示同一個文件,而是要在兩個窗口中編輯不一樣的兩個文件。使用:split file
命令,就能夠在另外一個窗口中打開文件file了。
命令:new
能夠直接打開一個新窗口,並對新文件進行編輯。
:sview
是:split和:view兩個命令的組合,它能夠分隔出一個新窗口,並以只讀方式打開指定的文件。
![Windows_Split](http://static.javashuo.com/static/loading.gif)
切換窗口
在gvim中,只要用鼠標點擊就能夠進入不一樣的窗口。而在vim中,則須要用ctrl+Ww命令在多個窗口中進行切換。
命令ctrl+Wj能夠將光標定位在下一個窗口中;ctrl+Wk能夠將光標定位在上一個窗口中;ctrl+Wt切換到頂部的窗口;ctrl+Wb切換到底部的窗口。ctrl+Wp切換到進行切換操做之前所在的窗口。
移動窗口
ctrl+Wr命令可使得窗口向下進行循環移動。這個命令能夠帶一個數字做爲參數,指明向下循環移動所執行的次數。與其相相似的ctrl+WR命令,可使得窗口向上循環移動。
命令ctrl+Wx,能夠將當前窗口與下一窗口進行位置對換。若是當前窗口在底部,則沒有下一個窗口,這時命令將當前窗口與上一個窗口進行位置對換。
利用ctrl+WK能夠將當前窗口放到最頂端;而ctrl+WJ能夠把當前窗口放到最底部。
關閉窗口
可使用ZZ
或是:q
命令或ctrl+Wc關閉窗口。
命令ctrl+Wo可使得當前窗口成爲屏幕上的惟一窗口,而其餘窗口所有關閉。系統會認爲咱們在其餘的每個窗口中都執行了:quit
命令。
控制窗口大小
在輸入split命令時,能夠加入參數來指定打開窗口的大小。例如命令:3 split file
,將在一個大小爲三行的新窗口中打開文件file。咱們也能夠將這個命令中的空格去掉,寫成:3split file
。
在多文本窗口中進行操做時,能夠用ctrl+W+命令增大窗口,默認增量爲1;用ctrl+W-命令減少窗口,默認值爲1。ctrl+W=命令能夠將幾個窗口的大小變爲相等。而命令countCtrl+W_可使得當前窗口變得count這樣高。若是沒有指定count,將會使得當前窗口變得儘量的最大。
固然,你也能夠用鼠標上下拖動狀態行來改變窗口的高度。
命令小結
:split |
新建一個窗口並顯示當前文件 |
:new |
新建一個窗口並開始新文件 |
:sview |
新建一個窗口並只讀打開文件 |
ctrl+Ww |
切換窗口 |
ctrl+Wj |
切換至下一窗口 |
ctrl+Wk |
切換至上一窗口 |
ctrl+Wt |
切換至頂部的窗口 |
ctrl+Wb |
切換至底部的窗口 |
ctrl+Wp |
切換至剛纔所在的窗口 |
ctrl+Wr |
向下循環移動窗口 |
ctrl+WR |
向上循環移動窗口 |
ctrl+Wx |
將當前窗口與下一窗口位置對換 |
ctrl+WK |
將當前窗口放到最頂端 |
ctrl+WJ |
將當前窗口放到最底部 |
ctrl+Wc |
關閉當前窗口 |
ctrl+Wo |
關閉其餘全部窗口 |
ctrl+W+ |
增大窗口 |
ctrl+W- |
減少窗口 |
ctrl+W= |
等分窗口 |
Ctrl+W_ |
最大化窗口 |
Technorati Tags: vi,vim,gvim
緩衝區(Buffer)是一塊內存區域,裏面存儲着正在編輯的文件。若是沒有把緩衝區裏的文件存盤,那麼原始文件不會被更改。
列示緩衝區
:buffers
命令將會列出當前編輯中全部的緩衝區狀態。在這個狀態列表中,前面的數字是緩衝區的數字標記,第二個標記就是緩衝區當前的狀態,緊接着是與緩衝區所關聯的文件名。有以下幾種狀態:
- (非活動的緩衝區)
a (激活緩衝區)
h (隱藏的緩衝區)
% (當前的緩衝區)
# (交換緩衝區)
= (只讀緩衝區)
+ (已經更改的緩衝區)
![Buffers](http://static.javashuo.com/static/loading.gif)
打開緩衝區
若是要選擇一個緩衝區,可使用:buffer number
命令,number就是緩衝區狀態列表中所顯示的數字。咱們也能夠用文件名來選擇緩衝區::buffer file
。
咱們能夠用:sbuffer number
命令,來分割當前窗口開始編輯一個緩衝區。若是指明瞭數字,那麼當前窗口就會顯示數字所標記的緩衝區中的內容;若是沒有指明數字,那麼就會顯示當前緩衝區的內容。固然,這個命令也能夠用文件名來作爲參數。
使用:ball
命令能夠爲每個緩衝區打開一個窗口。
切換緩衝區
:bnext
到下一個緩衝區;:bprevious
或:bNext
到前一個緩衝區;:blast
到最後一個緩衝區;:bfirst
到第一個緩衝區。
增長緩衝區
在編輯的過程當中,能夠用:badd filename
命令新增一個緩衝區。指定的文件會被加到緩衝區列表中,對這個文件的編輯過程只有切換到那個緩衝區時纔會開始。在這個命令中,還能夠指明爲這個緩衝區打開窗口時,光標所處的位置:badd +linenum filename
。
刪除緩衝區
可使用:bdelete filename
、:bdelete 3
或:3 bdelete
命令來刪除一個緩衝區。也能夠用:1,3 bdelete
命令來刪除指定範圍的緩衝區。
若是緩衝區被改動過,那麼該命令將失敗,除非使用!選項。若是使用了帶!選項的:bdelete! filename
命令,那麼在緩衝區中的全部改動都會被放棄。
卸載緩衝區
命令:bunload
會從內存中卸載一個緩衝區,全部爲這個緩衝區打開的窗口也會關閉。可是這個文件名仍然會存在於緩衝區列表中。若是緩衝區被改動過,那麼該命令將失敗,除非使用!選項,可是這樣全部的改動都會丟失。
命令小結
:buffers |
列示緩衝區狀態 |
:buffer |
編輯指定緩衝區 |
:ball |
編輯全部緩衝區 |
:bnext |
到下一緩衝區 |
:bprevious |
到前一緩衝區 |
:blast |
到最後一個緩衝區 |
:bfirst |
到第一個緩衝區 |
:badd |
增長緩衝區 |
:bdelete |
刪除緩衝區 |
:bunload |
卸載緩衝區 |
Technorati Tags: vi,vim,gvim
新建標籤頁
使用:tabe
命令和文件名參數,能夠在新標籤頁中打開指定的文件。也可使用:tabnew
命令,在新標籤頁中編輯新的文件。命令:tab split
將在新標籤頁中,打開當前緩衝區中的文件。
命令:tabf
容許你在當前目錄搜索文件,並在新標籤頁中打開。好比我想打開當前目錄下的img.txt文件,那麼就可使用:tabf img.*
命令。請注意,此命令只能打開一個文件,若是搜索出多個匹配文件,將提示你「文件名過多」,這時你須要給出更精確的搜索條件以打開文件。
Vim默認最多隻能打開10個標籤頁。你能夠用set tabpagemax=15
改變這個限制。
![Tabs_new](http://static.javashuo.com/static/loading.gif)
列示標籤頁
命令:tabs
能夠顯示已打開標籤頁的列表,並用「>」標識出當前頁面,用「+」標識出已更改的頁面。
![Tabs_list](http://static.javashuo.com/static/loading.gif)
關閉標籤頁
命令:tabc
能夠關閉當前標籤頁。而命令:tabo
將關閉全部的標籤頁。
切換標籤頁
命令:tabn
或gt
能夠移動到下一個標籤頁。而命令:tabp
或gT
將移動到上一個標籤頁。若是已經到達最後面或最前面的標籤頁,將會自動轉向循環。
![Tabs_gt_gT](http://static.javashuo.com/static/loading.gif)
若是你打開了不少標籤頁,那麼可使用:tabfirst
或:tabr
命令,移動到第一個標籤頁。使用:tablast
命令,移動到最後一個標籤頁。
移動標籤頁
若是你但願按照指定的次序排列標籤頁,那麼你可使用:tabm
命令。請注意,標籤頁次序是從0開始計數的。好比命令:tabm 1
將把當前標籤頁移動到第2的位置。若是你沒有爲:tabm
命令指定參數,那麼當前標籤頁將會被移動到最後。
配置標籤頁
默認狀況下,只有用戶新建了標籤頁纔會在窗口上方顯示標籤欄,這是由選項set showtabline=1
決定的。若是咱們但願老是顯示標籤欄,那麼能夠用set showtabline=2
命令來設置。若是咱們但願徹底不顯示標籤欄,那麼可使用set showtabline=0
來設置。
多標籤頁命令
使用:tabdo
命令,咱們能夠同時在多個標籤頁中執行命令。好比咱們打開了多個標籤頁,須要把這些文件中的「food」都替換成「drink」,那麼就可使用:tabdo %s/food/drink/g
命令,一次完成對全部文件的替換操做,而不用針對每一個文件重複操做。
圖形界面
若是你使用的是帶有圖形界面的gVim,那麼新建、關閉和打開標籤頁的操做,均可以經過在標籤頁上右擊鼠標完成。只須要點擊相應標籤,就能夠在不一樣的標籤頁間切換。
經過:help tab-page-intro
命令,能夠得到關於標籤頁使用的更多信息。
命令小結
:tabnew |
新建標籤頁 |
:tabs |
顯示已打開標籤頁的列表 |
:tabc |
關閉當前標籤頁 |
:tabn |
移動到下一個標籤頁 |
:tabp |
移動到上一個標籤頁 |
:tabfirst |
移動到第一個標籤頁 |
:tablast |
移動到最後一個標籤頁 |
Technorati Tags: vi,vim,gvim
查找字符
命令f
用於在本行內向前搜索。例如fx
是向前(Forward)搜索字母x。而命令F
是向後(Backward)搜索。例如Fx
是向後搜索字母x。與f和F這兩個相相似的是t和T命令。t
命令相似於f向前搜索命令,所不一樣的是t搜索到時並非將光標停在目標字符上,而是停在目標字符的前一個字符上。在搜索的過程當中,咱們可使用ESC來退出搜索而開始新的工做。
對於以上四個查找命令,咱們能夠重複執行這些操做。命令;
是按照前一次的查找方向繼續查找,若是要向相反的方向查找可使用,
命令。可是這些查找只是在行本行內進行,並不會將光標移動到其它的行。
查找字符串
咱們可使用/string
命令來向前(Forward)查找字符串string,按下回車後,光標就能跳到正確的地方。在這個命令中,/後的字符是咱們想要查找的字符,而回車鍵則代表了命令的結束。
有時想要查找的內容並不只在一處,咱們能夠在整個文章中進行查找:/
能夠繼續剛纔的查找操做。咱們還可使用n
命令來繼續剛纔的查找命令。這兩個命令都能達到一樣的效果。
通常來講,在進行查找時老是在向前查找。咱們也可使用?
命令向後(Backward)查找。N
也是逆向查找命令,他能夠實現當即反向查找。
若是咱們想要中止這一查找,可使用ctrl+C命令,若是是在Windows系統中,則要使用ctrl+Break命令。
vi具備記錄查找命令歷史的功能,這樣就不用重複輸入查找命令了。例如你剛纔作過的三次查找分別是:/one,/two,/three。而如今輸入/,而後按方向鍵的上或是下就看到剛纔查找的內容顯示在vi的下面,這時只要按下回車就會找到想要的內容了。
指定光標放置位置
在默認狀況下,查找時Vim會將光標放在第一個匹配的結果的開始處。咱們也能夠指定查找結束後,光標所處的位置。對於向前查找的命令,咱們能夠在斜線後用數字來指明光標所處的位置,例如/set/2
命 令會在查找結束後將光標放在第一個set字符串以後第二行的開始處。命令中的數字能夠是正數也能夠是負數。若是僅是一個簡單的數字,光標會被放在第一個匹 配字符串以後或以前的數字所指定的行的開始處。正是向後,負數是向前。若是斜線後是b和數字,那麼在查找結束後,光標將會放在第一個匹配字符串的開始處, 而後向左或是右移動n個字符,這裏的n即爲數字所指定的數。若是爲正數則是向右移動,若是是負數,則是向左移動。例如/set/b2
, 這個命令使光標在查找結束後放在第一個匹配字符的開始處,而後向右移動兩個字符,也就是說最後光標會位於第一個匹配字符串中的t的位置。將b改成s也是一 樣的效果。而參數e會使得光標放在第一個匹配字符串的結尾處。一樣咱們也能夠用數字來指定向右仍是向左移動光標以及移動的字符數。例如/set/e
命令會使光標放在第一個匹配字符處的結尾處。若是命令改成/set/e2
,會將光標放在第一個匹配字符串的結尾處,而後向右移動2個字符。這裏的數字若是是正數則向右移,若是爲負數則向左移。
命令/set/e+2
是在查找set字符串結束後,將光標放在第一個匹配字符串的結尾處,而後向右移動兩個字符。在這裏咱們將這個數字稱爲偏移量。若是要重複上一次的查找,可是須要不一樣的偏移量,能夠用//5
命令。不使用偏移量時,能夠指明一個空的偏移量,如//
命令。/
命令,重複前一次的查找,使用相同的偏移量。
查找命令?
也能夠實現相似的功能。例如?set?b5
命令,是將光標放在最後一個匹配字符串的開頭部分,而後向右移動5個字符。??-2
命令,則繼續前一次的查找命令,可是使用新的偏移量。??
命令,是繼續前一次的查找命令,可是不使用偏移量。
立時查找字符串
若是咱們想快速查找當前光標下的字符串,可使用命令*
,這個命令能夠向前查找與當前光標下的字符精確匹配的字符串。而命令#
,則向後查找與當前光標下的字符精確匹配的字符串。若是當前光標下的字符串爲word,在執行*命令查找時並不會與Word相匹配。與這個立時查找命令相相似的就是g*
命令。他不會進行嚴格的匹配。若是用這個命令來查找word,那麼就有可能和Word相匹配。而g#
命令與其相同,只不過他是向相反的方向進行查找匹配。
設置查找選項
咱們能夠選擇高亮顯示查找的文本,命令爲::set hlsearch
,關閉高亮顯示的命令爲::set nohlsearch
。若是想關掉剛纔高亮顯示的結果,可使用:nohlsearch
命令。
使用:set incsearch
命令,將打開匹配查找選項。在進行查找時就會顯示出不斷匹配的過程。例如你想查找的內容是include,在打開這個選項後,當你輸入/i,光標定位在i上,再繼續輸入n光標定位在in上,如此直到查打到所要求的內容。關閉這個選項的命令爲::set noincsearch
。
在默認的狀況下,Vim是大小寫敏感的。若是一個文件中有這樣幾個字符串:include,INCLUDE,Include。當咱們使用命令/include
來查找字符串時,只有include字符會被高亮顯示。可是若是咱們用:set ignorecase
命令打開ignorecase選項後,全部的相似的字符都會被高亮顯示。若是這樣的查找結果並非咱們想要的,可使用:set noignorecase
命令關閉這個選項。
若是設置了ignorecase選項後,咱們想要查找字符串word,而匹配的則多是word、Word,WORD。若是咱們要查找字符串WORD,匹配的結裏也是同樣的。可是若是設置了:set ignorecase
和:set smartcase
兩項後,執行結果就會變得不同了:若是咱們輸入的是小寫字符,那麼就會匹配各類可能的組合,這時與設置了ignorecase的狀況相同,可是若是咱們在輸入中有一個大寫字符,那麼這時就變成了精確查找,與設置了noignorecase的狀況相同。
咱們在執行查找命令時,也能夠用修飾符來控制大小寫敏感。在命令中加入修飾符\C將告訴Vim執行大小寫敏感的查詢,好比?\Cword
命令就只匹配單詞word。而在命令中加入修飾符\c則執行忽略大小寫的查詢。
在默認的情下,咱們輸入要查找的字符串,vim是從當前光標處向前查找,直到文件的結尾,若是沒有找到,那麼就會從文件的開頭開始查找,直到光標所處的位置。咱們能夠經過:set nowrapscan
命令,來禁止這種循環查找的方式,這樣若是已經查找到文件的底部時,就會在底部顯示出一條錯誤信息。若是咱們想要回到正常的狀態,可使用:set wrapscan
命令。
命令小結
f |
向前搜索並將光標停留在目標字符上 |
F |
向後搜索並將光標停留在目標字符上 |
; |
重複剛纔的查找 |
, |
反向重複剛纔的查找 |
t |
向前搜索並將光標停留在目標字符的前一個字符上 |
T |
向後搜索並將光標停留在目標字符的後一個字符上 |
/ |
向前查找 |
? |
向後查找 |
n |
繼續查找 |
N |
反向查找 |
* |
向前查找與當前光標下字符精確匹配的字符串 |
# |
向後查找與當前光標下字符精確匹配的字符串 |
:set hlsearch |
打開高亮顯示查找的文本 |
:set nohlsearch |
關閉高亮顯示查找的文本 |
:nohlsearch |
關閉當前高亮顯示的結果 |
:set incsearch |
打開顯示查找匹配過程 |
:set noincsearch |
關閉顯示查找匹配過程 |
:set ignorecase |
忽略大小寫 |
:set noignorecase |
精確匹配大小寫 |
:set nowrapscan |
禁止循環查找方式 |
:set wrapscan |
啓用循環查找方式 |
Technorati Tags: vi,vim,gvim
滾動屏幕
命令CTRL-U
能夠向上翻滾半屏,可是能夠經過設置scroll選項來控制這個命令翻滾的行數。例如命令:set scroll=10
可使得Vim一次翻滾10行。也能夠經過改變CTRL-U命令的參數來改變翻滾的行數。例如命令2CTRL-U
可使得Vim一次向上翻滾兩行。
當光標到達窗口上端或下端時,窗口要發生滾動。咱們能夠經過設置scrolljump選項來控制這個翻滾行數的大小,默認狀況下爲1。例如命令:set scrolljump=5
將翻滾量設爲5。與其相相似的就是sidescroll選項,所不一樣是後者控制水平的翻滾。
一般狀況下,窗口翻滾是在光標到達窗口頂部或底部時才發生的。咱們能夠經過scrolloff選項來控制光標與頂部或是底部有多少距離時發生。例如命令:set scrolloff=3
將值設爲3,當光標與頂部距離爲三行時發生翻滾,且翻滾後光標與底部相距三行。
放置行
有時咱們但願將指定的行放在屏幕頂端。先將光標放在指定的行上,而後輸入z<Enter>
,這一行就會出如今屏幕的頂端了。咱們還能夠利用參數將指定的行置於屏幕頂端。例如命令8z<Enter>
就是將第八行置於屏幕頂端。這個命令將指定的行置於頂端,並將光標移動到本行第一個非空白字符處。若是要將指定行置於頂端,並將光標保持在一行的當前位置不變,可使用zt
命令。
若是要將指定的行放在屏幕底部,可使用命令z-
或是zb
。所不一樣的是,前者將光標放在這一行中第一個沒有空白符的字符處,然後者是保持光標的位置不變。
命令zz
或是z.
能夠將指定的行放在屏幕的中部。這兩個命令的不一樣就是,前者保持光標的位置不變,然後者是將光標置於第一個非空白的字符處。
命令小結
CTRL-E |
向下動滾一行 |
CTRL-F |
向下滾動一屏 |
PageDown |
CTRL-B |
向上滾動一屏 |
PageUp |
H |
移動到屏幕頂部 |
M |
移動到屏幕中間 |
L |
移動到屏幕底部 |
Technorati Tags: vi,vim,gvim
在折行內移動
須要注意的是,若是咱們設置了wrap選項,那麼移動一行在屏幕上顯示也許就會是移動幾行。由於,此時在屏幕上顯示的幾行只是被自動折回以便於顯示的一行。這時咱們能夠用命令gj
或是g<Down>
來下移屏幕中顯示的一行,而非真正的一行。命令gk
或是g<Up>
命令與其相似,只是用於向上移動。
移動的歷史記錄
Vim能夠記錄你曾經到過的地方,而且可使你回到前一次到過的地方。例如在編輯文件時執行了下面的命令,從而到過不一樣的行:1G
到第一行;10G
到第十行;20G
到第二十行。如今執行:jumps
命令,就會看到一個曾到過的行的列表。使用命令CTRL-O
跳轉到移動記錄列表中上一個位置。而命令CTRL-I
跳轉到移動記錄列表中下一個位置。你不但能夠在當前文件內跳轉,甚至還能夠移動到曾經涉足過的其它文件。
![jumps](http://static.javashuo.com/static/loading.gif)
顯示位置信息
命令CTRL-G
可在屏幕的下端顯示當前所在位置的信息。咱們還能夠在CTRL-G命令加上一個數字參數,這個數字越大獲得的信息就越詳細。命令1CTRL-G
會顯示文件的全路徑。命令2CTRL-G
會同時顯示緩衝區的數字標號。
![info_CtrlG](http://static.javashuo.com/static/loading.gif)
命令gCTRL-G
可顯示出當前文件中的字符數的信息。主要顯示出當前行數(Line)、列數(Col)、字數(Word)、字符數(Char)和字節數(Byte)等信息。
![info_gCtrlG](http://static.javashuo.com/static/loading.gif)
命令:set ruler
能夠打開標尺選項(ruler option)。將在屏幕右下角,顯示當前所在的行和列,以及相對於整個文件所處的位置。
![set_ruler](http://static.javashuo.com/static/loading.gif)
命令小結
^ |
移動到當前行的第一個非空字符處 |
g^ |
_ |
<Home> |
移動到當前行的第一個字符處 |
g<Home> |
0 |
g0 |
<End> |
移動到當前行的結尾處 |
g<End> |
$ |
g$ |
gm |
移動到當前的中間處 |
count| |
移動到count列 |
counth |
向左移動count個字符 |
countl |
向右移動count個字符 |
countgo |
移動到第count個字符處 |
- |
移動到上一行的第一個非空字符處 |
+ |
移動到下一行的第一個非空字符處 |
) |
向前移動一個句子 |
( |
向後移動一個句子 |
} |
向前移動一個段落 |
{ |
向後移動一個段落 |
G |
移動到文件末尾 |
gg |
移動到文件開頭 |
`. |
移動到上次編輯處 |
Technorati Tags: vi,vim,gvim
在word間移動
命令w
使得光標向前移到一個單詞;命令b
向後移動一個單詞;命令e
也是向前移到一個單詞,可是將光標定位在單詞的結尾處;命令ge
則是向後移到一個單詞併到達前一個單詞的結尾處。
那麼怎麼樣來定義一個單詞呢?咱們都知道單詞是一系列字母的組合。然而在C程序中size56卻會被認爲是一個單詞,由於在C程序中咱們是經過字 母、數字和下劃線來組成一個單詞的。可是LISP程序中能夠在變量名中使用-,這時會認爲total-size是一個單詞,而在C程序中這卻會被認爲是兩 個單詞。咱們如何來解決這樣的衝突呢?Vim的解決辦法是,用選項來定義哪些是一個單詞中的,而哪些又不是。例以下面的命令定義了屬於一個單詞中的字母:
:set iskeyword=specification
查看當前選項,可使用下面的命令:
:set iskeyword?
命令會返回一組用用逗號分隔的值:
iskeyword=@,48-57,_,192_255
若是咱們想要單詞中的字母是專注的元音,可使用下面的命令:
:set iskeyword=a,e,i,o,u
咱們還可使用橫線來指定字母的範圍。若是要指定全部的小寫字母,能夠用下面的命令:
:set iskeyword=a-z
對於那些不能直接指定的字符,可使用十進制的數字來表示。若是咱們要指定小寫字母和下劃線爲一個單詞,可使用下面的命令:
:set iskeyword=a-z,45
排除某一個字符,能夠在這個字符前加上一個前綴^。例如咱們能夠定義一個單詞由除了q之外的小寫字符組成:
:set iskeyword=@,^q
iskeyword(命令iskeyword能夠簡記爲isk)選項使用如下特殊字符:
a |
字符a |
a-z |
全部由a到z的字符 |
@ |
由函數isalpha()所定義的全部字符 |
@-@ |
字符@ |
^x |
除了x之外的字符 |
^a-c |
除了a到c之外的字符 |
在WORD間移動
除了word以外,Vim還有一種概念WORD。雖然這只是大小寫的不一樣,可是他們卻表明了兩種不一樣的事物。word是指由iskeyword選項定義的字符串;而WORD則是指用空白符分隔的字符串。與WORD相關的一些命令以下:
[count]B |
向後移動count個WORDS |
[count]E |
向前移動count個WORDS,而且將光標置於WORD的末尾. |
[count]gE |
向後移動count個WORDS,而且將光標置於WORD的末尾. |
[count]W |
向前移動count個OWRDS. |
命令小結
w |
向前移動一個word |
e |
b |
向後移動一個word |
set iskeyword |
定義word選項 |
W |
向前移動一個WORD |
E |
B |
向後移動一個WORD |
Technorati Tags: vi,vim,gvim
二、語法高亮
在文件中找到 "syntax on 這一行,去掉前面的雙引號",雙引號是註釋的意思
三、自動縮進
在文件末尾添加一行,輸入 set autoindent
在添加一行,輸入 set cindent
其中 autoindent 是自動縮進; cindent是特別針對 C語言語法自動縮進
注意:若是設置好以上設置後,VIM沒有做出相應的動做,那麼請你把你的VIM升級到最新版,通常只要在終端輸入如下命令便可:sudo apt-get install vim
這個是用於程序中自動縮進所使用的空白長度指示的。通常來講爲了保持程序的美觀,和下面的參數最好一致。同時它也是符號移位長度的制定者。
定義tab所等同的空格長度,通常來講最好設置成8,由於若是是其它值的話,可能引發文件在打印之類的場合中看起來很彆扭。除非你設置 了 expandtab模式,也就是把tabs轉換成空格,這樣的話就不會一塊兒混淆,不過畢竟製表符爲8是最經常使用最廣泛的設置,因此通常仍是不要改。
若是咱們但願改變程序中的縮進怎麼辦?
shiftwidth 和 tabstop不同的話,你會發現程序比較難看的。這時候,softtabstop
就起做用了。能夠從vim的說明中看到,一旦設置了softtabstop的值時,你按下tab鍵,插入的是空格和tab製表符的混合,具體如何混合取決 於你設定的softtabstop,舉個例子,若是設定softtabstop=8, 那麼按下tab鍵,插入的就是正常的一個製表符;若是設定 softtabstop=16,那麼插入的就是兩個製表符;若是softtabstop=12,那麼插入的就是一個製表符加上4個空格;如 果 softtabstop=4呢?那麼一開始,插入的就是4個空格,此時一旦你再按下一次tab,此次的四個空格就會和上次的四個空格組合起來變成一個 製表符換句話說,softtabstop是「逢8空格進1製表符」,前提是你tabstop=8。
舉個例子,在多人一塊兒開發項目時,爲了使代碼風格儘可能保持一致,通常不容許在代碼使用TAB符,而以4個空格代之。咱們能夠編輯一個文件,包含下面的內容:
set shiftwidth=4
set expandtab
而後把下面的命令加入到.vimrc中:
autocmd FileType c,cpp set shiftwidth=4 | set expandtab
就能夠只在編輯c和cpp文件時實行這種設置了
藍色部分轉載於http://blog.163.com/allan_36983689/blog/static/316982402010118414355/
fileformats選項,用於處理文件格式問題。如下命令,告訴vim將UNIX文件格式作爲第一選擇,而將MS-DOS的文件格式作爲第二選擇:
:set fileformats=unix,dos
檢測到的文件格式會被存放在fileformat選項中,咱們能夠用如下命令來查詢:
:set fileformat?
咱們還能夠利用fileformat選項,來轉換種文件格式。例如,使用如下命令將名爲readme.txt的MS-DOS格式的文件,轉換爲UNIX格式的文件。
:set fileformat=unix
在默認狀況下,Vim認爲文件是由行組成的,而且文件最後一行是以<EOL>爲結束符的。若是你想設置文件以<EOL>結束符結尾,則能夠用如下命令:
:set endofline
若是你想設置文件不以<EOL>結束符來結尾,則可使用如下命令:
:set noendofline
若是你使用如下命令進入<list mode>,那麼就能夠清楚的看到以「$」表示的換行符和以「^I」表示的製表符。
:set list
![vi下顯示回車換行符等特殊符號 vi下顯示回車換行符等特殊符號 - 有何不可 - 不要辜負 指望](http://static.javashuo.com/static/loading.gif)
你可使用如下命令退出<list mode>:
:set nolist
刪除換行
能夠用如下命令刪除換行符:
:%s/\n//g
能夠用如下命令刪除DOS文件中的回車符「^M」:
:%s/\r//g
能夠用如下命令轉換DOS回車符「^M」爲真正的換行符:
:%s/\r/\r/g
能夠用如下命令刪除行尾的空格以及DOS回車符。它沒有使用「/」字符做爲替換命令各個參數間的分隔符,而是使用了「#」字符。命令還使用了「\?」正則表達式,用來匹配它前面出現的字符0次或1次。
:%s#\s*\r\?$##
能夠用如下命令刪除三行空行:
:%s/^\n\{3}//
能夠用如下命令將連續的兩個空行替換成一個空行:
:%s/\n\n/\r/g
自動換行
在默認狀況下,Vim是不會自動換行的,也就是說咱們須要本身決定回車的位置。可是咱們也能夠經過指定textwidth選項,讓Vim自動在指定位置換 行。例如,使用如下命令指定在30列時自動換行。因爲在遇到空格時纔會自動換行,因此換行的精確位置可能會小於你指定的列寬。
:set textwidth=29
而如下命令告訴Vim從右面算起當達到10個字符的空格時要換行:
:set wrapmargin=10
在指定了文本寬度的狀況下,當咱們將一行中的前幾個文字刪掉時,Vim並不會將後面行中的文本移動上來,而是造成了一些長短不一的段落,這樣看起來不是很好。能夠有幾種方法處理這個問題:
一種方法是,在可視化模式下選中這些文本,而後用gp
命令來格式化選中的段落。另外一種方法是,使用gqmotion
命令來完成格式。例如要格式化5行,就能夠用命令:gq4j
。這個命令告訴Vim要格式化本行,同時要格式化下面的4行,這樣就達到了格式化5行的目的。若是要格式化整個段落,能夠將光標放在段落的第一行上,而後執行命令gq}
。而使用命令gqip
能夠格式化當前段落,並且並沒必要要將光標放在段落的第一行上。
![vi下顯示回車換行符等特殊符號 vi下顯示回車換行符等特殊符號 - 有何不可 - 不要辜負 指望](http://static.javashuo.com/static/loading.gif)
若是要想格式化一行,可使用命令gqgq
,也能夠簡記爲gqq
。
注意:選項textwidth優先於wrapmargin。若是要使wrapmargin選項生效,必須將textwidth設置爲0(這也是默認值)。
合併行
命令J
使兩行合併爲一行,同時用空格分隔這兩行。
經過設置joinspace選項,能夠控制合併兩行時的分隔符(若是一行是以標點符號來結尾)。若是設置:set nojoinspaces
,用J命令合併兩行時會用一個空格來分隔;若是設置:set joinspaces
,用J命令合併兩行時會用兩個空格來分隔。若是不但願用空格來分隔合併的行,可使用gJ
命令。
咱們也可使用:join
命令,將幾行合併爲一行並使用空格來分隔各行。若是不但願加入空格,那麼可使用:join!
命令。
命令小結
:set fileformat |
設置文件格式 |
:set endofline |
設置文件結束符 |
:set noendofline |
取消文件結束符 |
:set list |
進入List Mode |
:set nolist |
退出List Mode |
:%s/\n//g |
刪除換行符 |
:set textwidth |
設置行寬 |
:set textwidth |
設置行邊距 |
:join |
合併多行 |
J |
合併兩行 |
以上灰色部分轉載於http://blog.sina.com.cn/s/blog_4c76784c0100uaf9.html
轉載於 https://github.com/ma6174/vim
- set sw=4
- set ts=4
- set et
- set smarttab
- set smartindent
- set lbr
- set fo+=mB
- set sm
- set selection=inclusive
- set wildmenu
- set mousemodel=popup
-
- au FileType php setlocal dict+=~/.vim/dict/php_funclist.dict
- au FileType css setlocal dict+=~/.vim/dict/css.dict
- au FileType c setlocal dict+=~/.vim/dict/c.dict
- au FileType cpp setlocal dict+=~/.vim/dict/cpp.dict
- au FileType scale setlocal dict+=~/.vim/dict/scale.dict
- au FileType javascript setlocal dict+=~/.vim/dict/javascript.dict
- au FileType html setlocal dict+=~/.vim/dict/javascript.dict
- au FileType html setlocal dict+=~/.vim/dict/css.dict
-
- "
- "syntastic相關
- execute pathogen#infect()
- let g:syntastic_python_checkers=['pylint']
- let g:syntastic_php_checkers=['php', 'phpcs', 'phpmd']
- "golang
- "Processing... % (ctrl+c to stop)
- let g:fencview_autodetect=0
- set rtp+=$GOROOT/misc/vim
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " 顯示相關
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- syntax on
- set cul "高亮光標所在行
- set cuc
- set shortmess=atI " 啓動的時候不顯示那個援助烏干達兒童的提示
- set go= " 不要圖形按鈕
- "color desert " 設置背景主題
- color ron " 設置背景主題
- "color torte " 設置背景主題
- "set guifont=Courier_New:h10:cANSI " 設置字體
- "autocmd InsertLeave * se nocul " 用淺色高亮當前行
- autocmd InsertEnter * se cul " 用淺色高亮當前行
- set ruler " 顯示標尺
- set showcmd " 輸入的命令顯示出來,看的清楚些
- "set whichwrap+=<,>,h,l " 容許backspace和光標鍵跨越行邊界(不建議)
- set scrolloff=3 " 光標移動到buffer的頂部和底部時保持3行距離
- set statusline=%F%m%r%h%w\ [FORMAT=% {&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H: %M\")} "狀態行顯示的內容
- set laststatus=2 " 啓動顯示狀態行(1),老是顯示狀態行(2)
- "set foldenable " 容許摺疊
- ""set foldmethod=manual " 手動摺疊
- set nocompatible "去掉討厭的有關vi一致性模式,避免之前版本的一些bug和侷限
- " 顯示中文幫助
- if version >= 603
- set helplang=cn
- set encoding=utf-8
- endif
- " 自動縮進
- set autoindent
- set cindent
- " Tab鍵的寬度
- set tabstop=4
- " 統一縮進爲4
- set softtabstop=4
- set shiftwidth=4
- " 不要用空格代替製表符
- set expandtab
- " 在行和段開始處使用製表符
- set smarttab
- " 顯示行號
- set number
- " 歷史記錄數
- set history=1000
- "搜索逐字符高亮
- set hlsearch
- set incsearch
- "語言設置
- set langmenu=zh_CN.UTF-8
- set helplang=cn
- " 老是顯示狀態行
- set cmdheight=2
- " 偵測文件類型
- filetype on
- " 載入文件類型插件
- filetype plugin on
- " 爲特定文件類型載入相關縮進文件
- filetype indent on
- " 保存全局變量
- set viminfo+=!
- " 帶有以下符號的單詞不要被換行分割
- set iskeyword+=_,$,@,%,#,-
- " 字符間插入的像素行數目
-
- "markdown配置
- au BufRead,BufNewFile *.{md,mdown,mkd,mkdn,markdown,mdwn} set filetype=mkd
- au BufRead,BufNewFile *.{go} set filetype=go
- au BufRead,BufNewFile *.{js} set filetype=javascript
- "rkdown to HTML
- nmap md :!~/.vim/markdown.pl % > %.html <CR><CR>
- nmap fi :!firefox %.html & <CR><CR>
- nmap \ \cc
- vmap \ \cc
-
- "將tab替換爲空格
- nmap tt :%s/\t/ /g<CR>
-
-
-
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- """""新文件標題
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "新建.c,.h,.sh,.java文件,自動插入文件頭
- autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java,*.py exec ":call SetTitle()"
- ""定義函數SetTitle,自動插入文件頭
- func SetTitle()
- "若是文件類型爲.sh文件
- if &filetype == 'sh'
- call setline(1,"\#!/bin/bash")
- call append(line("."), "")
- elseif &filetype == 'python'
- call setline(1,"#!/usr/bin/env python")
- call append(line("."),"# coding=utf-8")
- call append(line(".")+1, "")
- " elseif &filetype == 'mkd'
- " call setline(1,"<head><meta charset=\"UTF-8\"></head>")
- else
- call setline(1, "/*************************************************************************")
- call append(line("."), " > File Name: ".expand("%"))
- call append(line(".")+1, " > Author: ma6174")
- call append(line(".")+2, " > Mail: ma6174@163.com ")
- call append(line(".")+3, " > Created Time: ".strftime("%c"))
- call append(line(".")+4, " ************************************************************************/")
- call append(line(".")+5, "")
- endif
- if &filetype == 'cpp'
- call append(line(".")+6, "#include<iostream>")
- call append(line(".")+7, "using namespace std;")
- call append(line(".")+8, "")
- endif
- if &filetype == 'c'
- call append(line(".")+6, "#include<stdio.h>")
- call append(line(".")+7, "")
- endif
- " if &filetype == 'java'
- " call append(line(".")+6,"public class ".expand("%"))
- " call append(line(".")+7,"")
- " endif
- "新建文件後,自動定位到文件末尾
- endfunc
- autocmd BufNewFile * normal G
-
-
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "鍵盤命令
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- :nmap <silent> <F9> <ESC>:Tlist<RETURN>
- map! <C-Z> <Esc>zzi
- map! <C-O> <C-Y>,
- map <C-A> ggVG$"+y
- map <F12> gg=G
- map <C-w> <C-w>w
- imap <C-k> <C-y>,
- imap <C-j> <ESC>
- " 選中狀態下 Ctrl+c 複製
- "map <C-v> "*pa
- imap <C-v> <Esc>"*pa
- imap <C-a> <Esc>^
- imap <C-e> <Esc>$
- vmap <C-c> "+y
- set mouse=v
- "set clipboard=unnamed
- "去空行
- nnoremap <F2> :g/^\s*$/d<CR>
- "比較文件
- nnoremap <C-F2> :vert diffsplit
- "nnoremap <Leader>fu :CtrlPFunky<Cr>
- "nnoremap <C-n> :CtrlPFunky<Cr>
- "列出當前目錄文件
- map <F3> :NERDTree<CR>
- "打開樹狀文件目錄
- map <C-F3> \be
- :autocmd BufRead,BufNewFile *.dot map <F5> :w<CR>:!dot -Tjpg -o %<.jpg % && eog %<.jpg <CR><CR> && exec "redr!"
- "C,C++ 按F5編譯運行
- map <F5> :call CompileRunGcc()<CR>
- func! CompileRunGcc()
- exec "w"
- if &filetype == 'c'
- exec "!g++ % -o %<"
- exec "!time ./%<"
- elseif &filetype == 'cpp'
- exec "!g++ % -o %<"
- exec "!time ./%<"
- elseif &filetype == 'java'
- exec "!javac %"
- exec "!time java %<"
- elseif &filetype == 'sh'
- :!time bash %
- elseif &filetype == 'python'
- exec "!time python2.7 %"
- elseif &filetype == 'html'
- exec "!firefox % &"
- elseif &filetype == 'go'
- " exec "!go build %<"
- exec "!time go run %"
- elseif &filetype == 'mkd'
- exec "!~/.vim/markdown.pl % > %.html &"
- exec "!firefox %.html &"
- endif
- endfunc
- "C,C++的調試
- map <F8> :call Rungdb()<CR>
- func! Rungdb()
- exec "w"
- exec "!g++ % -g -o %<"
- exec "!gdb ./%<"
- endfunc
-
-
- "代碼格式優化化
-
- map <F6> :call FormartSrc()<CR><CR>
-
- "定義FormartSrc()
- func FormartSrc()
- exec "w"
- if &filetype == 'c'
- exec "!astyle --style=ansi -a --suffix=none %"
- elseif &filetype == 'cpp' || &filetype == 'hpp'
- exec "r !astyle --style=ansi --one-line=keep-statements -a --suffix=none %> /dev/null 2>&1"
- elseif &filetype == 'perl'
- exec "!astyle --style=gnu --suffix=none %"
- elseif &filetype == 'py'||&filetype == 'python'
- exec "r !autopep8 -i --aggressive %"
- elseif &filetype == 'java'
- exec "!astyle --style=java --suffix=none %"
- elseif &filetype == 'jsp'
- exec "!astyle --style=gnu --suffix=none %"
- elseif &filetype == 'xml'
- exec "!astyle --style=gnu --suffix=none %"
- else
- exec "normal gg=G"
- return
- endif
- exec "e! %"
- endfunc
- "結束定義FormartSrc
-
-
-
-
-
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- ""實用設置
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- if has("autocmd")
- autocmd BufReadPost *
- \ if line("'\"") > 0 && line("'\"") <= line("$") |
- \ exe "normal g`\"" |
- \ endif
- endif
- "當打開vim且沒有文件時自動打開NERDTree
- autocmd vimenter * if !argc() | NERDTree | endif
- " 只剩 NERDTree時自動關閉
- autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif
-
- " 設置當文件被改動時自動載入
- set autoread
- " quickfix模式
- autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>
- "代碼補全
- set completeopt=preview,menu
- "容許插件
- "filetype plugin on
- "共享剪貼板
- "set clipboard+=unnamed
- "自動保存
- set autowrite
- "set ruler " 打開狀態欄標尺
- "set cursorline " 突出顯示當前行
- set magic " 設置魔術
- set guioptions-=T " 隱藏工具欄
- set guioptions-=m " 隱藏菜單欄
- ""set foldcolumn=0
- ""set foldmethod=indent
- ""set foldlevel=3
- " 不要使用vi的鍵盤模式,而是vim本身的
- set nocompatible
- " 去掉輸入錯誤的提示聲音
- set noeb
- " 在處理未保存或只讀文件的時候,彈出確認
- set confirm
- "禁止生成臨時文件
- set nobackup
- set noswapfile
- "搜索忽略大小寫
- set ignorecase
-
-
-
-
- set linespace=0
- " 加強模式中的命令行自動完成操做
- set wildmenu
- " 使回格鍵(backspace)正常處理indent, eol, start等
- set backspace=2
- " 容許backspace和光標鍵跨越行邊界
- set whichwrap+=<,>,h,l
- " 能夠在buffer的任何地方使用鼠標(相似office中在工做區雙擊鼠標定位)
- set mouse=a
- set selection=exclusive
- set selectmode=mouse,key
- " 經過使用: commands命令,告訴咱們文件的哪一行被改變過
- set report=0
- " 在被分割的窗口間顯示空白,便於閱讀
- set fillchars=vert:\ ,stl:\ ,stlnc:\
- " 高亮顯示匹配的括號
- set showmatch
- " 匹配括號高亮的時間(單位是十分之一秒)
- set matchtime=1
- " 光標移動到buffer的頂部和底部時保持3行距離
- set scrolloff=3
- " 爲C程序提供自動縮進
- "自動補全
- "":inoremap ( ()<ESC>i
- "":inoremap ) <c-r>=ClosePair(')')<CR>
- ":inoremap { {<CR>}<ESC>O
- ":inoremap } <c-r>=ClosePair('}')<CR>
- "":inoremap [ []<ESC>i
- "":inoremap ] <c-r>=ClosePair(']')<CR>
- "":inoremap " ""<ESC>i
- "":inoremap ' ''<ESC>i
- ""function! ClosePair(char)
- "" if getline('.')[col('.') - 1] == a:char
- "" return "\<Right>"
- "" else
- "" return a:char
- "" endif
- ""endfunction
- filetype plugin indent on
- "打開文件類型檢測, 加了這句才能夠用智能補全
- set completeopt=longest,menu
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " CTags的設定
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- let Tlist_Sort_Type = "name" " 按照名稱排序
- let Tlist_Use_Right_Window = 1 " 在右側顯示窗口
- let Tlist_Compart_Format = 1 " 壓縮方式
- let Tlist_Exist_OnlyWindow = 1 " 若是隻有一個buffer,kill窗口也kill掉buffer
- ""let Tlist_File_Fold_Auto_Close = 0 " 不要關閉其餘文件的tags
- ""let Tlist_Enable_Fold_Column = 0 " 不要顯示摺疊樹
- "let Tlist_Show_One_File=1 "不一樣時顯示多個文件的tag,只顯示當前文件的
- "設置tags
- "set tags=tags
- "set autochdir
-
-
-
-
-
-
-
-
-
-
-
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "其餘東東
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "默認打開Taglist
- let Tlist_Auto_Open=0
- """"""""""""""""""""""""""""""
- " Tag list (ctags)
- """"""""""""""""""""""""""""""""
- let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
- let Tlist_Show_One_File = 1 "不一樣時顯示多個文件的tag,只顯示當前文件的
- let Tlist_File_Fold_Auto_Close = 1
- let Tlist_Exit_OnlyWindow = 1 "若是taglist窗口是最後一個窗口,則退出vim
- let Tlist_Use_Right_Window = 1 "在右側窗口中顯示taglist窗口
- " minibufexpl插件的通常設置
- let g:miniBufExplMapWindowNavVim = 1
- let g:miniBufExplMapWindowNavArrows = 1
- let g:miniBufExplMapCTabSwitchBufs = 1
- let g:miniBufExplModSelTarget = 1
- nmap tl :Tlist<cr>
-
-
-
- "輸入法
- :let g:vimim_map='c-/'
- ":let g:vimim_cloud='sougou' " QQ雲輸入
- :let g:vimim_punctuation=0 " 不用中文標點
- :set pastetoggle=<C-H>
- :let g:vimim_cloud=-1
-
-
- "python補全
- let g:pydiction_location = '~/.vim/after/complete-dict'
- let g:pydiction_menu_height = 20
- let Tlist_Ctags_Cmd='/usr/local/bin/ctags'
- let g:miniBufExplMapWindowNavVim = 1
- let g:miniBufExplMapWindowNavArrows = 1
- let g:miniBufExplMapCTabSwitchBufs = 1
- let g:miniBufExplModSelTarget = 1
-
-
- set iskeyword+=.
- set termencoding=utf-8
- set encoding=utf8
- set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030
-
- autocmd FileType python set omnifunc=pythoncomplete#Complete
-
- "set nocompatible " be iMproved
- "filetype off " required!
-
- set rtp+=~/.vim/bundle/vundle/
- call vundle#rc()
-
- " let Vundle manage Vundle
- " required!
- Bundle 'gmarik/vundle'
-
- " My Bundles here:
- "
- " original repos on github
- Bundle 'tpope/vim-fugitive'
- Bundle 'rstacruz/sparkup', {'rtp': 'vim/'}
- Bundle 'Yggdroot/indentLine'
- let g:indentLine_char = '┊'
- "ndle 'tpope/vim-rails.git'
- " vim-scripts repos
- Bundle 'L9'
- Bundle 'FuzzyFinder'
- " non github repos
- Bundle 'git://git.wincent.com/command-t.git'
- Bundle 'Auto-Pairs'
- Bundle 'python-imports.vim'
- Bundle 'CaptureClipboard'
- Bundle 'ctrlp-modified.vim'
- Bundle 'last_edit_marker.vim'
- Bundle 'synmark.vim'
- "Bundle 'Python-mode-klen'
- Bundle 'SQLComplete.vim'
- Bundle 'Javascript-OmniCompletion-with-YUI-and-j'
- "Bundle 'JavaScript-Indent'
- "Bundle 'Better-Javascript-Indentation'
- Bundle 'jslint.vim'
- Bundle "pangloss/vim-javascript"
- Bundle 'Vim-Script-Updater'
- Bundle 'ctrlp.vim'
- Bundle 'tacahiroy/ctrlp-funky'
- Bundle 'jsbeautify'
- Bundle 'The-NERD-Commenter'
- "django
- Bundle 'django_templates.vim'
- Bundle 'Django-Projects'
-
- "Bundle 'FredKSchott/CoVim'
- "Bundle 'djangojump'
- " ...
- let g:html_indent_inctags = "html,body,head,tbody"
- let g:html_indent_script1 = "inc"
- let g:html_indent_style1 = "inc"
-
- filetype plugin indent on " required!
- "
- " Brief help
- " :BundleList - list configured bundles
- " :BundleInstall(!) - install(update) bundles
- " :BundleSearch(!) foo - search(or refresh cache first) for foo
- " :BundleClean(!) - confirm(or auto-approve) removal of unused bundles
- "
- " see :h vundle for more details or wiki for FAQ
- " NOTE: comments after Bundle command are not allowed..
- "
- "
- "ctrlp設置
- "
- set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.png,*.jpg,*.gif " MacOSX/Linux
- set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe,*.pyc,*.png,*.jpg,*.gif " Windows
-
- let g:ctrlp_custom_ignore = '\v[\/]\.(git|hg|svn)$'
- let g:ctrlp_custom_ignore = '\v\.(exe|so|dll)$'
- let g:ctrlp_extensions = ['funky']
-
- let NERDTreeIgnore=['\.pyc']
set lbr
以breakat的值的位置迴繞長行,而不是以屏幕上能夠顯示的最後一個字符迴繞。breakat=" ^I!@*-+;:,./?"
if &term=="xterm"
set t_Co=8
set t_Sb=^[[4%dm
set t_Sf=^[[3%dm
endif
可在個人站點上下載/查看: _vimrc, _vimrc.txt, _vimrc.html
http://linxiao.li.googlepages.com/vim
http://www.leal.cn
使用前須要先下載一些 scripts, 見 _vimrc 或 plugin_list.txt, plugin_list.html
同上網址。
使用前先查看 vimrc 的使用說明。
Good Luck!
附 _vimrc
"=====================================================================================
" Description: My daily vimrc with dozens of plugins.
" Originally derived from MetaCosm's http://vi-improved.org/vimrc.php
" Last Change: 0 14/05/2006 20:54:07 Leal@RAINT:_vimrc
"
" Author: Leal <linxiao.li AT gmail DOT com>
" http://www.leal.cn
" Version: 1.0065
"
" Usage: 1. Prepare necessary dirs and files
" $VIMDATA X:\Vim\vimdata on Win, ~/vimdata on Linux
" |
" |-- temp to put swap files <DIR>
" |-- backup to put backup files <DIR>
" |-- diary to save calendar.vim's diaries <DIR>
" |-- GetLatest to save GetLatestVimScripts.vim's <DIR>
" | |
" | `-- GetLatestVimScripts.dat to store GLVS's items
" |
" |-- _vim_fav_files to store favmenu.vim's items
" `-- _vim_mru_files to store mru.vim's items
"
" 2. Get all scripts you favor on www.vim.org better with GLVS
"
" 3. Get all needed utilities, especially on Windows, e.g.
" wget -- WGET for Windows (win32) http://users.ugent.be/~bpuype/wget/
" ctags -- Exuberant Ctags http://ctags.sf.net/
"
" 4. If you have no idea of some option, just press K (<S-k>) on it.
"
" 5. HTML file is produced with :TOhtml, with colo default.
"
"=====================================================================================
"-------------------------------------------------------------------------------------
" TODO List
"-------------------------------------------------------------------------------------
" 1. Install Chinese Vim help helplang -> cn
"-------------------------------------------------------------------------------------
" general
"-------------------------------------------------------------------------------------
set nocompatible " use vim as vim, should be put at the very start
set history=1000 " lines of Ex-mode commands, search history
set browsedir=buffer " use directory of the related buffer for file browser
set clipboard+=unnamed " use clipboard register '*' for all y, d, c, p ops
set viminfo+=! " make sure it can save viminfo
set isk+=$,%,#,- " none of these should be word dividers
set confirm " raise a dialog confirm whether to save changed buffer
set ffs=unix,dos,mac " favor unix ff, which behaves good under bot Winz & Linux
set fenc=utf-8 " default fileencoding
set fencs=utf-8,ucs-bom,euc-jp,gb18030,gbk,gb2312,cp936
map Q gq
" don't use Ex-mode, use Q for formatting
filetype on " enable file type detection
filetype plugin on " enable loading the plugin for appropriate file type
"-------------------------------------------------------------------------------------
" platform dependent
"-------------------------------------------------------------------------------------
if has("win32")
let $VIMDATA = $VIM.'/vimdata'
let $VIMFILES = $VIM.'/vimfiles'
let PYTHON_BIN_PATH = 'd:/foo/python/python.exe' " ensure the path right
else
let $VIMDATA = $HOME.'/vimdata'
let $VIMFILES = $HOME.'/.vim'
let PYTHON_BIN_PATH = '/usr/bin/python'
set guifont=courier\ 10
endif
"-------------------------------------------------------------------------------------
" path/backup
"-------------------------------------------------------------------------------------
set backup " make backup file and leave it around
set backupdir=$VIMDATA/backup " where to put backup file
set directory=$VIMDATA/temp " where to put swap file
set runtimepath+=$VIMDATA " add this path to rtp, support GetLatestVimScripts.vim
set path=.,/usr/include/*,, " where gf, ^Wf, :find will search
set tags=./tags,tags,$VIMRUNTIME/doc/tags,$VIMFILES/doc/tags " tags files CTRL-] uses
set makeef=error.err " the errorfile for :make and :grep
"-------------------------------------------------------------------------------------
" colors
"-------------------------------------------------------------------------------------
set background=dark " use a dark background
syntax on " syntax highlighting
"-------------------------------------------------------------------------------------
" gui-only settings
"-------------------------------------------------------------------------------------
if has("gui_running")
colo inkpot " colorscheme, inkpot.vim
set lines=40 " window tall and wide, only if gui_running,
set columns=120 " or vim under console behaves badly
endif
"-------------------------------------------------------------------------------------
" Vim UI
"-------------------------------------------------------------------------------------
set linespace=1 " space it out a little more (easier to read)
set wildmenu " type :h and press <Tab> to look what happens
set ruler " always show current position along the bottom
set cmdheight=2 " use 2 screen lines for command-line
set lazyredraw " do not redraw while executing macros (much faster)
set nonumber " don't print line number
set hid " allow to change buffer without saving
set backspace=2 " make backspace work normal
set whichwrap+=<,>,h,l " allow backspace and cursor keys to wrap
set mouse=a " use mouse in all modes
set shortmess=atI " shorten messages to avoid 'press a key' prompt
set report=0 " tell us when anything is changed via :...
set fillchars=vert:\ ,stl:\ ,stlnc:\
" make the splitters between windows be blank
"-------------------------------------------------------------------------------------
" visual cues
"-------------------------------------------------------------------------------------
set showmatch " show matching paren
set matchtime=5 " 1/10 second to show the matching paren
set nohlsearch " do not highlight searched for phrases
set incsearch " BUT do highlight where the so far typed pattern matches
set scrolloff=10 " minimal number of screen lines to keep above/below the cursor
set novisualbell " use visual bell instead of beeping
set noerrorbells " do not make noise
set laststatus=2 " always show the status line
set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$ " what to show while :set list
set statusline=%{VimBuddy()}\ %F%m%r%h%w\ [%{&ff}]\ [%Y]\ [\%03.3b\ \%02.2B]\ [%02v\ %03l\ %L\ %p%%]
"-------------------------------------------------------------------------------------
" text formatting/layout
"-------------------------------------------------------------------------------------
set ai " autoindent
set si " smartindent
set cindent " do C-style indenting
set fo=tcrqn " see help (complex)
set tabstop=4 " tab spacing (settings below are just to unify it)
set softtabstop=4 " unify
set shiftwidth=4 " unify
set noexpandtab " real tabs please!
set smarttab " use tabs at the start of a line, spaces elsewhere
set nowrap " do not wrap lines
set formatoptions+=mM " so that vim can reformat multibyte text (e.g. Chinese)
"-------------------------------------------------------------------------------------
" folding
"-------------------------------------------------------------------------------------
set foldenable " turn on folding
set foldmethod=indent " make folding indent sensitive
set foldlevel=100 " don't autofold anything (but I can still fold manually)
set foldopen -=search " don't open folds when you search into them
set foldopen -=undo " don't open folds when you undo stuff
"-------------------------------------------------------------------------------------
" plugin - a.vim
"-------------------------------------------------------------------------------------
" alternate files quickly (.c --> .h etc)
"-------------------------------------------------------------------------------------
" plugin - c.vim
"-------------------------------------------------------------------------------------
"set makeprg=g++\ %
let g:C_AuthorName = 'Leal'
let g:C_Email = 'linxiao.li NOSPAM gmail DOT com'
"-------------------------------------------------------------------------------------
" plugin - runscript.vim (for Python)
"-------------------------------------------------------------------------------------
"let PYTHON_BIN_PATH = ...
"-------------------------------------------------------------------------------------
" plugin - calendar.vim
"-------------------------------------------------------------------------------------
let g:calendar_diary = $VIMDATA.'/diary' " where to store your diary
"-------------------------------------------------------------------------------------
" plugin - mru.vim (most recently used files)
"-------------------------------------------------------------------------------------
let MRU_File = $VIMDATA.'/_vim_mru_files' " which file to save mru entries
let MRU_Max_Entries = 20 " max mru entries in _vim_mru_files
"-------------------------------------------------------------------------------------
" plugin - favmenu.vim
"-------------------------------------------------------------------------------------
let FAV_File = $VIMDATA.'/_vim_fav_files' " which file to save favorite entries
"-------------------------------------------------------------------------------------
" plugin - minibufexpl.vim
"-------------------------------------------------------------------------------------
let g:miniBufExplTabWrap = 1 " make tabs show complete (no broken on two lines)
let g:miniBufExplModSelTarget = 1
"-------------------------------------------------------------------------------------
" plugin - taglist.vim
"-------------------------------------------------------------------------------------
if has("win32")
let Tlist_Ctags_Cmd = $VIMFILES.'/ctags.exe' " location of ctags tool
else
let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
endif
let Tlist_Sort_Type = "name" " order by
let Tlist_Use_Right_Window = 1 " split to the right side of the screen
let Tlist_Compart_Format = 1 " show small meny
let Tlist_Exist_OnlyWindow = 1 " if you are the last, kill yourself
let Tlist_File_Fold_Auto_Close = 0 " do not close tags for other files
let Tlist_Enable_Fold_Column = 0 " do not show folding tree
"-------------------------------------------------------------------------------------
" plugin - matchit.vim
"-------------------------------------------------------------------------------------
let b:match_ignorecase = 1
"-------------------------------------------------------------------------------------
" plugin - supertab.vim
"-------------------------------------------------------------------------------------
" <Tab> has been mapped to SuperTab() func in that plugin
"-------------------------------------------------------------------------------------
" plugin - timestamp.vim
"-------------------------------------------------------------------------------------
let g:timestamp_regexp = '\v\C%(<Last %([cC]hanged?|[Mm]odified):\s+)@<=.*$'
let g:timestamp_rep = '%w %d/%m/%Y %H:%M:%S #u@#h:#f'
augroup TimeStampHtml
au filetype html let b:timestamp_regexp = '\v\C%(\<!-- Timestamp:\s{-1,})@<=.{-}%(\s*--\>)@='
au filetype html let b:timestamp_rep = '%a %d/%m/%Y %r #u@#h:#f'
augroup END
"-------------------------------------------------------------------------------------
" plugin - perl-support.vim
"-------------------------------------------------------------------------------------
let g:Perl_AuthorName = 'Leal'
let g:Perl_Email = 'linxiao.li NOSPAM gmail DOT com'
let tlist_perl_settings = 'perl;c:constants;l:labels;s:subroutines;d:POD'
"-------------------------------------------------------------------------------------
" utilities
"-------------------------------------------------------------------------------------
" select range, then hit :SuperRetab($width) - by p0g and FallingCow
fu! SuperRetab(width) range
sil! exe a:firstline . ',' . a:lastline . 's/\v%(^ *)@<= {'. a:width .'}/\t/g'
endf
" bind :CD to :cd %:h, then change cwd to the dir that includes current file
sil! com -nargs=0 CD exe 'cd %:h'
"TODO just do it
fu! AddLineNo(isVM)
if(a:isVM == 1)
sil! exe 's/^/\=' . strpart((line('.')-line("'<")+1)." ", 0, 4)
else
sil! exe '%s/^/\=' . strpart(line('.')." ", 0, 4)
endif
endf
" add line number befor each line of the text
" :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)
" :%s/^/\=strpart(line('.')." ", 0, 4)
" visual mode
" :s/^/\=strpart((line('.')-line("'<")+1)." ", 0, 4)
" XML support, e.g. element,,,<CR> -> <element> </element>
" Bart van Deenen , www.vandeenensupport.com fu! MakeElement() if match(getline('.'),'^\s*>\s*$') == -1 "the deleted word was not alone on the line let @w = "i<pla</pa>F<i" else "the deleted word was on it's own on the line let @w = "i<po</pa>kA" endif endf " include colon(5Cool for namespaces in xsl for instance "setlocal iskeyword=@,48-57,_,192-255,58 inoremap <buffer> ,,, ><Esc>db:call MakeElement()<enter>@w "------------------------------------------------------------------------------------- " mappings "------------------------------------------------------------------------------------- map <right> <ESC>:MBEbn<RETURN> " -> switches buffers map <left> <ESC>:MBEbp<RETURN> " <- switches buffers map <up> <ESC>:Sex<RETURN><ESC><C-W><C-W> " up arrow to bring up a file explorer map <down> <ESC>:Tlist<RETURN> " down arrow to bring up the taglist map <A-i> i <ESC>r " Alt-i inserts a single char, and back to normal map <F3> <ESC>ggVG:call SuperRetab()<left> map <F4> ggVGg? " Rot13 encode the current file "noremap <silent> <C-F11> :cal VimCommanderToggle()<CR> " plugin - php_console.vim "map <F5> :call ParsePhpFile()<cr> " call function in normal mode "imap <F5> <ESC>:call ParsePhpFile()<cr> " call function in insert mode "------------------------------------------------------------------------------------- " autocommands "------------------------------------------------------------------------------------- au BufEnter * :syntax sync fromstart " ensure every file does syntax highlighting (full) au BufNewFile,BufRead *.asp :set ft=jscript " all my .asp files ARE jscript au BufNewFile,BufRead *.tpl :set ft=html " all my .tpl files ARE html " ftplugin - python_fold - $VIMFILES/ftplugin/python_fold.vim " add names in pydiction to autocomplete class or object's class, attribute or method au FileType python set complete+=k$VIMFILES/dict/pydiction isk+=.,( "au FileType python pyfile $VIMFILES/plugin/pyCallTips.py au FileType python source $VIMFILES/plugin/python.vim "au FileType java source $VIMFILES/ftplugin/JavaRun.vim "au FileType php set complete+=k$VIMFILES/dict/php.dict isk+=.,( au FileType text setlocal textwidth=78 "------------------------------------------------------------------------------------- " highlight active line in normal mode, Vim7 don't need this "------------------------------------------------------------------------------------- "highlight CurrentLine guibg=darkgrey guifg=white ctermbg=darkgrey ctermfg=white "au! Cursorhold * exe 'match CurrentLine /\%' . line('.') . 'l.*/' "set ut=19 "------------------------------------------------------------------------------------- " stuffs I don't like "------------------------------------------------------------------------------------- "set ignorecase -- turns out, I like case sensitivity "set list -- turns out, do not display unprintable characters such as Tab "autocmd GUIEnter * :simalt ~x -- having it auto maximize the screen is annoying "autocmd BufEnter * :lcd %:p:h -- switch to current dir (breaks some scripts) "------------------------------------------------------------------------------------- " useful abbrevs "------------------------------------------------------------------------------------- iab xasp <%@language=jscript%><CR><%<CR><TAB><CR><BS>%><ESC><<O<TAB> iab xdate <c-r>=strftime("%m/%d/%y %H:%M:%S")<cr> "------------------------------------------------------------------------------------- " customize cursor color to indicate IM is on "------------------------------------------------------------------------------------- if has('multi_byte_ime') hi Cursor guifg=NONE guibg=Green hi CursorIM guifg=NONE guibg=Blue endif "------------------------------------------------------------------------------------- " TVO defaults - otl.vim "------------------------------------------------------------------------------------- let otl_install_menu =1 let no_otl_maps =0 let no_otl_insert_maps =0 let otl_bold_headers =0 let otl_use_thlnk =0 let g:otl_use_viki =0 let maplocalleader ="," map <c-w><c-f> :FirstExplorerWindow<cr> map <c-w><c-b> :BottomExplorerWindow<cr> map <c-w><c-t> :WMToggle<cr> let g:winManagerWidth = 35 let g:winManagerWindowLayout = 'TodoList' let g:tskelDir = $VIMFILES."/skeletons" "------------------------------------------------------------------------------------- " vim: set et ft=vim tw=98 path+=$VIMFILES/*: