$ 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-
可使文件从新包含入“大象”和“小牛”。此过程以下图所示:

若是你先撤销了若干改变,而后又进行了一些其它的改变。此时,被撤销的改变就成为一个分支。咱们可使用:undolist
命令查看修改的各个分支。

- "编号" 列是改变号。这个编号持续增长,用于标识特定可撤销的改变。
- "改变" 列是根结点到此叶结点所需的改变数目。
- "时间" 列是此改变发生的时间。
使用: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中的内容:

若是想要查看全部寄存中的内容,可使用如下命令:
: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
命令移动到上一个拼写错误处。

纠正
若是想要纠正错误的拼写:首先将光标移至错误的单词上,而后执行z=
命令列出一组相近的单词,你能够在其中选择正确的拼写。

有些特殊单词(好比图中的"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

折叠
使用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

你可使用如下命令退出<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
能够格式化当前段落,并且并没必要要将光标放在段落的第一行上。

若是要想格式化一行,可使用命令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]
实际效果以下图所示:

除了显示的内容,你还可使用如下命令定义显示的颜色。
: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
实际效果以下图所示:

你还能够经过在_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
以下图所示,状态行的文件名部分,在插入状态时显示为橘色背景,这样就能很明显地提醒咱们所处的状态:

命令小结
: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
能够显示咱们所打开的文件,并用中括号标识出正在编辑的文件。

若是咱们在一个文件中进行一些改动,再切换到另外一个文件中进编辑,这时就能够用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两个命令的组合,它能够分隔出一个新窗口,并以只读方式打开指定的文件。

切换窗口
在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 (隐藏的缓冲区)
% (当前的缓冲区)
# (交换缓冲区)
= (只读缓冲区)
+ (已经更改的缓冲区)

打开缓冲区
若是要选择一个缓冲区,可使用: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
能够显示已打开标签页的列表,并用“>”标识出当前页面,用“+”标识出已更改的页面。

关闭标签页
命令:tabc
能够关闭当前标签页。而命令:tabo
将关闭全部的标签页。
切换标签页
命令:tabn
或gt
能够移动到下一个标签页。而命令:tabp
或gT
将移动到上一个标签页。若是已经到达最后面或最前面的标签页,将会自动转向循环。

若是你打开了不少标签页,那么可使用: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
跳转到移动记录列表中下一个位置。你不但能够在当前文件内跳转,甚至还能够移动到曾经涉足过的其它文件。

显示位置信息
命令CTRL-G
可在屏幕的下端显示当前所在位置的信息。咱们还能够在CTRL-G命令加上一个数字参数,这个数字越大获得的信息就越详细。命令1CTRL-G
会显示文件的全路径。命令2CTRL-G
会同时显示缓冲区的数字标号。

命令gCTRL-G
可显示出当前文件中的字符数的信息。主要显示出当前行数(Line)、列数(Col)、字数(Word)、字符数(Char)和字节数(Byte)等信息。

命令:set ruler
能够打开标尺选项(ruler option)。将在屏幕右下角,显示当前所在的行和列,以及相对于整个文件所处的位置。

命令小结
^ |
移动到当前行的第一个非空字符处 |
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

你可使用如下命令退出<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
能够格式化当前段落,并且并没必要要将光标放在段落的第一行上。

若是要想格式化一行,可使用命令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/*: