- 浏览: 179526 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Caelebs:
RMI及其调试(JDK1.6) -
walker2009:
...
svn如何使用import目录作为工作拷贝+我的svn学习笔记(转) -
ygsilence:
请问,怎么linux版本的xampp怎么整合现有tomcat, ...
[原创]xampp-tomcat- connector---- xampp 完美整合现有的tomcat [续] -
witcheryne:
zrong 写道skanion 写道VIMweejulius ...
svn + vim + ant + linux 竟然完全替代了eclipse -
zrong:
skanion 写道VIMweejulius 写道怎么重构用V ...
svn + vim + ant + linux 竟然完全替代了eclipse
一、 对vim配置文件的编辑:
:scriptnames 发现配置文件的位置
:edit ~/.vimrc 编辑该配置文件
vim说明文件的阅读:
CTRL-] 跳转到当前光标所在单词对应的主题
CTRL-O 回到前一个位置
复制一个样板vimrc文件(unix):
:!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc
复制一个样板vimrc文件:
:set compatible?
查看vim配置文件的所在位置:
:scriptnames 或 :version
拷贝vimtutor,并重命名:
vim -u NONE -c `e $VIMRUNTIME/tutor/tutor.cn` -c `w! TUTORCOPY` -c `q`
vim -u NONE -c "set nocp" TUTORCOPY
会话保存了整个Vim的外观. 视图保持一个窗口的属性
:mkview [num] "保存当前窗口的视图,num可以是1-9"
:loadview [num] "载入上次保存的视图,num可以是1-9"
:mkview ~/.vim/main.vim "保存当前的文件的视图到文件"
:source ~/.vim/main.vim "载入已存在的试图文件"
:set viminfo=string "string指代你要保存的东西. 其语法是一个选项字符跟一个参数. 一对对的选项/参数以逗号分隔",可用选项有:
: 要保存的冒号命令历史记录数
@ 要保存的输入历史记录数
/ 要保存的搜索命令历史记录数
r 可移动介质, 对此不会保存其标记信息(可以多次使用)
! 以大写字母开始并且不含有任何小写字母的全局变量
h 开始时禁用°hlsearch°选项
% 缓冲区列表(只有没指定文件参数启动Vim时才会恢复这些信息)
c 使用°encoding°选项中的方法进行字符编码转换
n viminfo文件的名字(必需是最后一个选项)
在Vim中用":wviminfo"和":rviminfo"命令来保存和恢复这些信息,
:wviminfo! ~/tmp/viminfo "保存一个viminfo的信息"
:rviminfo! ~/tmp/viminfo "读取一个viminfo的信息,这样可用把其他文件的viminfo那来用"
:mksession vimbook.vim "创建一个会话文件"
:source vimbook.vim "恢复一个会话状态"
vim -S vimbook.vim "启动Vim时恢复某个会话"
sessionoptions 选项的设置如下,如::set sessionoptions+=resize "恢复Vim窗口的大小"
blank 空窗口
buffers 所有的缓冲区, 而不仅是当前窗口中的
curdir 当前目录
folds folds, 包括手工创建的
help 帮助窗口
options 所以的选项和键映射
winsize 窗口大小
=============================================================
二、 在普通模式下
移动光标:
h 左 j 下 k 上 l 右
gj 下,长字符串行折行时只移动下一个屏幕显示行
gk 上,长字符串行折行时只移动下一个屏幕显示行
w (小)向后(右)移动一个word,光标在word的首字母处,如3w,向后移动3个word
b (小)向前(左)移动一个word,光标在word的首字母处,如3b,向前移动3个word
e (小)向后(右)移动一个word,光标在word的尾字母处,如3e,向后移动3个word
ge (小)向前(左)移动一个word,光标在word的尾字母处,如3ge,向前移动3个word
W (大)向后(右)移动一个word,光标在word的首字母处,如3w,向后移动3个word,但忽略其他边界字符
B (大)向前(左)移动一个word,光标在word的首字母处,如3b,向前移动3个word,但忽略其他边界字符
E (大)向后(右)移动一个word,光标在word的尾字母处,如3e,向后移动3个word,但忽略其他边界字符
gE (大)向前(左)移动一个word,光标在word的尾字母处,如3ge,向前移动3个word,但忽略其他边界字符
$ (shift 4)移动到当前行行尾,同功能键,可以使用“2$”记数,移动到下一行的行尾
^ (shift 6)移动到当前行的第一个非空白字符上,不接收记数移动
0 (数字)移动到当前行的第一个字符上,同功能键,不接收记数移动
f (小)向后(右)搜索某一单字符,光标在被搜索字符上,如“fy”,搜索下一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
F (大)向前(左)搜索某一单字符,光标在被搜索字符上,如“Fy”,搜索上一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
t (小)向后(右)搜索某一单字符,光标在被搜索字符前,如“ty”,搜索下一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
T (大)向前(左)搜索某一单字符,光标在被搜索字符前,如“Ty”,搜索上一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
% 跳转到与当前光标下的括号相匹配的字符上记数+% 跳转到正文的某个部分,如"50%"将会把光标定位在文件的中间
gg 跳转到第一行
G 跳转到最后一行,可用"23G"等跳转到指定的行
H 跳转到本屏幕的开始
M 跳转到本屏幕的中间
L 跳转到本屏幕的结尾
zz 把当前行置为屏幕正中央
zt 把当前行置于屏幕顶端
zb 把当前行置于屏幕底端
删除字符:
x (小)删除一个字符,"4x"删除4个字符
d (小) 后跟任何一个位移命令, 它将删除从当前光标起到位移的终点处的文本内容,如:dd 删除一行字符,dw 删除一个word,"d4w"删除4个word,"d2e"删除2个word到词尾,"d$"删除自当前光标到行尾的内容.
c (小)删除一个word后并进入Insert模式,如:cc 删除一行后并插入一行(同"c$")
r 输入一个字符用以替换当前光标下的那个字符
J (大)删除一个换行符
u (小)撤销操作
CTRL-R 重做(反转撤消动作)
U (大)撤销上一次的操作,包括对自己的上次操作
快捷方式:
x 代表dl(删除当前光标下的字符)
X 代表dh(删除当前光标左边的字符)
D 代表d$(删除到行尾的内容)
C 代表c$(修改到行尾的内容)
s 代表cl(修改一个字符)
S 代表cc(修改一整行)
编辑命令:
i (小)在当前光标之前插入文本
a (小)在当前光标之后插入文本
o (小)当前行的下面插入新一行
O (大)当前行的上面插入新一行
9k 上移9行,其他命令也可用数字+命令的方式实现,重复的编辑操作
ZZ (大)保存当前文件并退出
放弃编辑:
:q! 放弃所有的修改并退出
:e! 放弃所有修改并重新载入该文件的原始内容
求助:
:help 得到帮助文件的起始点,等同于F1功能键
:help {subject} 得到某个特殊主题的帮助,如::help CTRL-A,查看关于CTRL-A的帮助
:help `command` 得到关于某个选项的帮助,如:help `number`
:help E37 得到某个错误ID号的帮助
三、 小技巧:
交换两个字母,“xp”
光标在字母中间时,删除整个单词,“daw”; 并可以用“.”重复操作来删除整个单词。“daw”即“Delete A Word”
修改整句话,即删除整句后加入一个空行,不包含句子后面的空格(是"Inner Sentence"的缩写),“cis”
修改整句话,即删除整句后加入一个空行,包含了句子后面的空格(是"a Sentence"的缩写),“cas”
修改整句话,即删除整句后加入一个空行,包含了句子后面的空白,“das”
用v进入visual模式,用as可以选择一个句子。
%s/\/newword/gc "把文件中所有的oldword替换成newword,如果没有‘c’则就不进行提示,"g"标志则指示替换操作将一行中所有出现的目标字串都进行替"
在filename1中打开filename2,并比较filename1和filename2
:edit filename2
:vertical diffsplit filename2
简单映射:使用":map"命令,把一连串Vim命令以一个按键来表示。":map"不带参数则列出已定义的映射。
:map i{ea} "在一个word的前后加上大括号"其中和为手工键入,而不是键盘上的功能键。当把一个vim功能键变为映射键后,就失去了原有的意义,至到映射被删除。
对字符串行进行排序:
第一种方法:
/^firstline
j
:.,/^$/-1!sort
说明:上面的命令首先会跳转到第一行, 即开头是"firstline"的行, 然后再下移一行, 用sort程序过滤自该行直至下一个空行.
第二种方法:
在Visual模式下选择要排序的行然后用"!sort"命令
反转行序:
:g/^/m 0
说明:g是命令global,m是命令move
对一串连续的行进行反转行序:
:`t+1,.g/^/m `t
说明:首先移到第一行并以"mt"标记该行.然后移到最后一行执行命令
统计文件全部内容的字数:
先键入"g",再用CTRL-g
统计文件部分内容的字数:
方法一:
将光标移到要统计部分的开头处执行"g CTRL-G"命令, 然后移到要统计部分的末尾再用一次"g CTRL-G". 计算两次命令得到的当前word位置之差, 就得到这部分内容的字数统计
方法二:
使用Visual模式, 选择要统计的部分. 然后用"g CTRL-G".
在编辑脚本或程序时查找帮助页:
光标移到要查找帮助的关键字上,然后键入"K"(大写),Vim会对光标所在的词执行"man"程序。
让man页与vim在一个窗口中显示:
首先运行man对应的文件类型plugin(可以把它放到vimrc文件里):
:source $VIMRUNTIME/ftplugin/man.vim
然后可以使用vim的"Man"命令对某些字符进行查讯帮助,如:"Man 3 echo"查找man页第三节中的echo,通过CTRL-W来切换当前窗口。
消除所有行尾的多余空格:
:%s/\s\+$//
说明:指定的行号范围是"%", 即应用于每一行中. ":substitute"命令要查找的字串是"\s\+$".这会查找位于行尾的一个或多个空白字符,":substitute"命令的"to"部分是空内容:"//". 即把此类的空白都替换为空。
查找一个word在何处被引用:
编辑所有包含了"frame counter"的C文件
vim \VimBacktick{}grep -l frame_counter *.c\VimBacktick{}
说明:"-l"参数, 所以该命令将只是列出包含了该词的文件名而不显示匹配的行。
如果你想查找所有C程序中的"error string", 就可以用下面的命令:
:grep error_string *.c
说明:跳转到下一个匹配的行使用":cnext"命令.跳转到前一个匹配的行可以用":cprev"命令, ":clist"命令则可以一次列出所有的匹配
注:内置的":grep"命令用到了外部命令grep(Unix)或findstr(Windows).
在":"号命令行中:
CTRL-C或 可以放弃所有已经键入的命令.
"CTRL-D"可以列出未用补全的命令。
"CTRL-P"可以向前返回已经输入过的命令,效果如同
"CTRL-N"可以向后返回已经输入过的命令,效果如同
q: 在屏幕底部打开一个命令行(小)窗口. 该窗口的内容是历史记录, 最后一行是空行。对命令行窗口作出的修改不会被保存. 历史记录不会因此被改写.
可以用CTRL-Z来挂起vim,并回到shell中,之后可用"fg"来回到vim中。
执行shell命令:
在Vim中:
:!{program} 执行{program},如!ls,!pwd,!shell等
:r !{program} 执行{program}并读取它的输出
:w !{program} 执行{program}并把当前缓冲区的内容作为它的输入
:[range]!{program} 以{program}过滤指定的行
vim -x exam.txt "加密文件exam.txt"
vim -x -n file.txt "加密file.txt文件,并不生成交换文件,注:Vim会把所有东西都放到内存里"
:setlocal noswapfile "可在编辑过程中禁止使用交换文件"
:X "(大写)设置对文件的加密"
:set key= "停止对一个文件的加密,把`key`选项设置为一个空字串"
vim -b datafile "编辑一个二进制文件"
:set display=uhex "设置以十六进制格式显示不可打印字符,"ga"命令可以来查明当前光标下字符的本来面目"
g CTRL-G "可以获知光标所在字符是整个文件中第几个字节"
2345go "转到第2345个字节去"
使用xxd程序编辑二进制文件的过程:
1 用vim -b datafile 打开二进制文件
2 用":%!xxd"进行十六进制格式的转储
3 编辑完毕后使用":%!xxd -r"反向转换,逆向转换时只有其十六进制形式被认为是有效的. 对可打印形式的改变会被转换程序忽略
:hide edit two.txt "在编辑另一个文件时而又想不保存当前的文件时,可用隐藏缓冲区的编辑"
:buffers 或:ls "列出整个缓冲区列表,"
列出的缓冲区列表说明如下:
u 未被列出的缓冲区|unlisted-buffer|[[译: 既然未被列出你又怎么知道? :ls! % 当前缓冲区
# 上一次的活动缓冲区
l 被载入并显示在某窗口中的缓冲区
h 被载入但隐藏的缓冲区.
= 只读的缓冲区
- 不可编辑的缓冲区, 其中°modifiable°选项被关闭
+ 有改动的缓冲区
:buffer [num] "在当前窗口编辑缓冲区"
:sbuffer [num] "打开一个并列的窗口编辑缓冲区"
:bdelete 3 "一个缓冲区从列表中去除"
:bnext "跳转到下一个缓冲区"
:bprevious "跳转到前一个缓冲区"
:bfirst "跳转到第一个缓冲区"
:blast "跳转到最后一个缓冲区"
:{range}center [width] 让一个范围的行居中
:{range}right [width] 让一个范围的行右对齐
:{range}left [margin] 让一个范围的行左对齐,[margin]指左边留白的宽度
左右对齐的方法:
1.使用宏包:runtime macros/justify.vim
2.使用外部程序:%!fmt
合并多行文本:
:g/./,/^$/join
说明:
:g/./ 一个全局命令, 查找那些至少有一个字符的行.
,/^$/ 指定一个范围, 从当前行开始(非空行)直到一个空行.
join ":join"命令把指定范围内的行连为一行.
重新格式化文件:
1.先修改所要修改的内容
2.用"v"命令进入Visual模式
3.选定所要重新格式化的内容后键入"gq"
4.其他格式化方式:"gqap"格式化一段文本(段以空行为分界). 包括当前光标之前的部分,"gggqG"格式化整个文件
dp "两个文件的不同被消除了, 当前窗口中引起不同的内容被放到另一窗口中缺少这段内容的地方去了. "dp"是"diff put"的缩写"
将光标移到右边的窗口, 到"changed"插入的位置.键入命令:do
vim也会消除了该位置的不同之处,"do"意为"diff obtain"
将"Last, First"改为"First Last",使用命令:
:%s/\([^,]*\), \(.*\)/\2 \1/
说明:替换操作的命令参数形如"/from/to/". 斜杠是用来分隔"from"和"to"的.对于"from"部分对应的内容:
第一个部分位于\( \)之间, 对应"Last" \( \)
匹配除逗号外的任何东西[^,]
任意次重复*
匹配", " ,
第二个部分位于\( \)之间, 对应"First" \( \)
任意字符 “.”
任意次重复 “*”
在对应"to"的部分我们指定了"\2"和"\1". 这在Vim中被称作反向引用. 它们可以用来指代此前在\( \)中匹配的内容. "\2"指代在第二个"\( \)"中匹配的内容, 也就是"First"部分, "\1"则指第一个\( \)中的内容,即"Last" 部分.
:iabbrev ad advertisement 每次键入"ad"时都自动扩展为"advertisement",可以用":iab"代替完整的命令名":iabbrev"
:abbreviations 命令可以列出当前定义的所有缩写
:unabbreviate + 缩写词替换词 命令可以用于删除一个缩写,但输入之后它还会再做一次替换才会生效。:abclear有同样的效果。
:abbreviate errword rightword 可以更正错误的输入
CTRL-V 命令可以保证你键入的下一个字符被原封不动地被录入(如特殊字符),支持ASCII,十六进制(前面加o),八进制输入(前面加x),16bit或32bit的数字(前面加u)
通过输入连续的三个键"CTRL-K加两个字母"可以键入键盘上没有的字符,用:digraphs可以查看可用的连字符
=============================================================
CRTL-G 显示正在编辑的文件的详细信息
CTRL-U 使文本向下滚动半屏
CTRL-D 使文本向上滚动半屏
CTRL-E 使文本向上滚动一行
CTRL-Y 使文本向下滚动一行
CTRL-F 使文本向后滚动一整屏(实际上是整屏去两行)
CTRL-B 使文本向前滚动一整屏
CTRL-O 跳转到更早些时间停置光标的位置(提示: O意为older).
CTRL-I 跳回到后来停置光标的更新的位置(提示: I在键盘上位于O前面,作用同键)
"CTRL-P" 对于重复的输入,按下"CTRL-P", Vim会根据已经输入的部分向前寻找,补全整个词
"CTRL-N" 对于重复的输入,按下"CTRL-N", Vim会根据已经输入的部分向后寻找,补全整个词
CTRL-X CTRL-F 文件名
CTRL-X CTRL-L 整行内容
CTRL-X CTRL-D 宏定义(也包括那些在include文件里定义的宏)
CTRL-X CTRL-I 当前文件和被当前文件include的文件
CTRL-X CTRL-K 来自一个字典文件的word
CTRL-X CTRL-T 来自一个thesaurus的word
CTRL-X CTRL-] tags
CTRL-X CTRL-V Vim的命令行
用`complete`选项来定制Vim在补全word时所用的策略,使用`ignorecase`选项,在搜索匹配的word时忽略大小写的不同。`infercase`. 它使搜索
匹配的word时忽略剩余部分的大小写。
在插入模式下,CTRL-Y会复制上一行的字母内容到当前行的光标处。
在插入模式下,CTRL-E会复制下一行的字母内容到当前行的光标处。
=============================================================
简单模式搜索:(使用正则表达式)
^ 字符匹配一行的开头,如"/^word"只匹配出现在一行开头的word
$ 字符匹配一行的末尾,如"/word$"只匹配出现在一行末尾的word
注:"/^the$",只会匹配到一行的内容仅包含"the"的情况. 有空白字符也不行
. 匹配除换行符外的任何单字符,如"/wo.d","."可以用"\."来匹配,在normal模式下也可用来做重复的动作,
标记跳转:
m{mark} 将当前光标下的位置名之为标记"mark".从a到z一共可以使用26个自定义的mark. 定义后的标记不在屏幕上显示,只在Vim内部记录所代表的位置
`{mark} mark就是你定义的标记的名字,如用"ma"标记"a"处,用"`a"跳转到标记a处
` 进行此次跳转之前的起跳点
`` 上次编辑该文件时光标最后停留的位置,跳回到上一个的出发点,可以在两点之间来回跳转
[ 最后一次修改的起始位置
] 最后一次修改的结束位置
:marks 列出已经标记过的标记列表
:jumps 列出曾经跳转过的位置列表
/string 用于向下搜索一个字符串,用“n”可以继续查找下一个,用“N”可以继续查找上一个
?string 用于向上搜索一个字符串,用“n”可以继续查找下一个,用“N”可以继续查找上一个
* 把光标定位于某个word上,对当前光标所在的word向下搜索
# 把光标定位于某个word上,对当前光标所在的word向上搜索
/\ 精确搜索单词word
查找一个文件:把光标置于所要查找的文件名上,然后键入"gf".当这个文件并不在工作目录下时,Vim会用在`path`选项中定义的目录去查找它. 该选项的内容是一个以逗号分隔的目录名列表,格式为::set path+=c:/prog/include.
或通过:find filename来查找。
或通过":sfind"命令来替代":find"命令,在新窗口中打开。
=============================================================
set nocompatible “设置默认模式为普通vim模式”
set backspace=indent,eol,start "在Insert模式下退格键何时可以删除光标之前的字符. 选项中以逗号分隔的三项内容分别指定了Vim可以删除位于行首的空格, 断行, 以及开始进入Insert模式之前的位置"
:set ignorecase 忽略大小写匹配
:set noignorecase 大小写的精确匹配
:set number 在每行的前面显示一个行号
:set nonumber 关闭行号显示
:set ruler 开启右下角的光标位置显示
:set noruler 关闭右下角的光标位置显示
:set hlsearch 高亮显示搜索结果
:set nohlsearch 关闭高亮显示搜索结果
:nohlsearch 去掉当前的高亮显示
:set incsearch 在键入目标字符串的过程中就同时开始搜索
:set wrapscan 搜索过程在文件内部循环进行(默认)
:set nowrapscan 搜索过程在文件内部只进行一次
set autoindent "在开始一个新行时对该行施以上一行的缩进方式."
set history=50 "设置冒号命令和搜索命令的命令历史列表的长度"
set ruler "总是在Vim窗口的右下角显示当前光标的行列信息"
set showcmd "在Vim窗口的右下角显示一个完整的命令已经完成的部分"
set incsearch "在键入要搜索的字串的同时就开始搜索当前已经键入的部分"
map Q gq "定义了一个"Q"命令映射到"gq"操作符命令,进入Ex模式"
filetype on "自动识别文件类型"
plugin on "用文件类型plugin脚本,对某种文件类型来说最常用的选项可以放在一个Vim中叫文件类型plugin的脚本里.请参考|write-filetype-plain|"
indent on "使用缩进定义文件,请参考jfiletype-indent-onj和°indentexpr°选项"
"autocmd FileType text setlocal textwidth=78 "
autocmd FileType text "是一个自动命令. 它所定义的是每当文件类型被设置为"text"时就自动执行它后面的命令."
setlocal textwidth=78 "在当前行已超过78个字符时,让Vim可以自动断行,这种设置只对当前的一个文件有效."
:options "打开选项帮助窗口"
:help `wrap` "获得选项关键字的详细解释"
:set iskeyword& "恢复一个选项值的默认设置"
:set nowrap "控制长行是否折到下一行显示的命令是"
:set sidescroll=10 "查看左右10个字符的上下文"
:set whichwrap=b,s "控制移动光标移动到行首或行尾时的操作,光标位于行首时按退格键会往回移动到上一行的行尾. 同时在行尾按空格键也会移动到下 一行的行首"
:set whichwrap=b,s, "左右箭头键在遇到行的边界时可以转行,在normal模式下"
:set whichwrap=b,s,,[,] "左右箭头键在遇到行的边界时可以转行,在Insert模式下"
:set list "设置制表符成为可见的字符"
:set listchars=tab:>-,trail:- "使制表符以">---"显示, 同时行尾空格以"-"显示"
:set iskeyword
[email=iskeyword=@,48-57,_,192-255]iskeyword=@,48-57,_,192-255[/email]
> "定义了一个word中可以包含哪些字符,"@"在这里代指所有的字母. "48-57"指ASCII码从48到57的那些字符, 即0到9. "192-255"是可打印拉丁字母,要去除一个字符使用操作符"-=",要添加一个字符使用操作符"+=""
:syntax enable "打开色彩"
:set background="/dark" "设置背景颜色为暗色(或light亮色)"
:colorscheme evening "选择颜色方案(evening),其他颜色方案在$VIMRUNTIME/colors目录中"
:source $VIMRUNTIME/syntax/2html.vim "把当前文件转到HTML格式"
:set autowrite "每当需要时就自动保存,不需要过问"
:set noautowrite "每当需要保存时,就过问"
:set backup "生成备份文件"
:set backupext=.bak "重新命名备份文件的后缀为.bak" 备注: 如果°backup°选项是关闭的但°writebackup°选项是打开的, Vim还会生成一个备份文件. 但是, 一旦该文件被成功地保存它就会被自动删除.
:set patchmode=.orig "对原始文件进行备份"
:set backupext=.old "指定对原始文件进行备份的后缀"
:write >> logfile "把当前文件的内容追加到logfile文件中"
:set fileformats=unix,dos "Vim能自动识别的格式的集合"
:set fileformat? "查看当前的文件格式,在vim中有三种格式,分别是:unix ;dos 和mac "
:edit ++fileformat=unix|dos|mac file.txt "强制指定文件file.txt的格式为unix,dos或mac,++fileformat可荐絬为++ff"
把一个dos格式的文件转换成unix格式可以通过以下两步完成:
:set fileformat=unix
:write
:set showmatch "键入"闭括号"时显示它与前面的哪个"开括号"匹配,对于大,中,小括号都适用"
:set matchtime=15 "设置键入某个闭括号时,等待时间的长短,时间单位是十分之一秒"
:set textwidth=30 限制每一行能有多少个字符。注:`wrap`选项使Vim能显示需要折行的过长的行, 但只是为了显示的需要, 并不在文件中实际插入一个换行符
:set autoindent "自动插入缩进"
>> "增加一行的缩进量"
: 打开一个文件或目录~
" o : 为文件或目录打开一个新的窗口~
" O : 在前一个被访问过的窗口中打开指定的文件/目录
" p : 预览文件/目录~
" i : 切换大小/日期的列表显示~
" s : 选择一个排序键r : 逆向排序~
" - : 进入父目录c : 进入目录
" R : 文件重命名D : 删除文件
" :help help-explorer得到更多信息~
使用当前的窗口
o 打开一个新窗口
O 使用最近使用过的其它窗口[[译: 如果只有当前窗口就打开新窗口]]
p 同O, 但同时还将光标定位于该窗口中
参考|preview-window|
i 切换显示文件的大小和日期/时间信息
s 光标所在的条目作为排序键进行排序. 首先用i命令打开
对文件大小和日期的显示. 然后将光标移到任一文件的大小
上按下s. 此时所有的文件都将按其大小进行排序. 光标置
于日期上时按s则会按其日期进行排序.
r 逆向排序当前的排序列表(either size or date)
c 将当前目录切换到当前光标所在的目录名. 接下来使用":edit"
命令时就无需附加路径名了
R 更改当前光标下的文件, Vim会提示你输入一个新的文件名[[译: 不支持目录更名]].
D 删除当前光标下的文件名. Vim也会提示你进行确认[[译: 不支持目录的删除]].
关于编程常用快捷键:
[ [ = 移动到前一个行首的'{'字符上, 等价于?^{
] ] = 移动到下一个行首的'{'字符上, 等价于/^{
[ ] = 移动到前一个行首的'}'字符上, 等价于?^}
] [ = 移动到下一个行首的'}'字符上, 等价于?^}
{ = 到前一个空行上
} = 到下一个空行上
gd = 到当前局部变量的定义处(当前的意思是光标停留其上的单词).
* = 到与当前单词相同的下一个单词上
# = 到与当前单词相同的上一个单词上
'' = 到上次光标停靠的行
ctags:
[/home/someuser/src]$ ctags * "以源程序目录下所有文件作为参数"
[/home/someuser/src]$ vi -t foo_bar "在命令行上启动vi程序时通过-t选项加要跳转的程序元素名"
灾难恢复
vim -r "Vim会读取交换文件(这正是存放你已编辑的文件的地方)以及你的原文件的一些信息."
|swap-file| "关于交换文件的位置和命名"
|preserve| "手工刷新交换文件"
|swapname| "查看原文件及其交换文件的名字"
`updatecount` "连续击键多少次后做一次同步"
`updatetime` "多长时间之后做一次同步"
`swapsync` "同步交换文件时是否同时做一次磁盘同步"
`directory` "列出存放交换文件的目录"
`maxmem` "尚未写入交换文件的内容所受的内存限制"
`maxmemtot` "同上, 但是针对所有文件."
=============================================================
注意"o"和"O"在Visual模式与Normal模式下行为迥异, 在Normal模
式下它们是在当前行的下面或上面插入一个新行.
=============================================================注:汉字的空格不被视为空白字符
要改变Vim对word边界的定义, 请查看°iskeyword°选项
用%处理哪些括号可以由`matchpairs`选项来定义与滚屏相关的命令, 请参考jQ scj.若要一直保持当前行的前后都有一些内容显示在屏幕上, 请参考`scrolloff`选项.
问题:在使用*键时,但如果要匹配一小片包含了几个word的文本呢?如何避免手工键入?
答案: Visual select, yank, :let @/=@", n
在使用:set hlsearch时,如果排除函数外别处同名变量的干扰呢? 答: j/\%:let current_reg = @"gvs=current_reg "让"p"可以在Visual模式下以此前yank的内容替换当前选择的文本块"
if has("vms")
set nobackup
else
set backup
endif 在覆盖一个文件之前备份该文件. 但是对VMS系统除外, 因为该系统已经为文件保存了老的版本. 备份文件名由当前文件名
加后辍"~"组成. 请参考|07.4|
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif 打开语法高亮功能, 前提是当前系统支持彩色显示. `hlsearch`告
诉Vim高亮显示所有与最后一次搜索目标串相匹配的文本
autocmd BufReadPost *
\ if line("°\"") > 0 && line("°\"")
:scriptnames 发现配置文件的位置
:edit ~/.vimrc 编辑该配置文件
vim说明文件的阅读:
CTRL-] 跳转到当前光标所在单词对应的主题
CTRL-O 回到前一个位置
复制一个样板vimrc文件(unix):
:!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc
复制一个样板vimrc文件:
:set compatible?
查看vim配置文件的所在位置:
:scriptnames 或 :version
拷贝vimtutor,并重命名:
vim -u NONE -c `e $VIMRUNTIME/tutor/tutor.cn` -c `w! TUTORCOPY` -c `q`
vim -u NONE -c "set nocp" TUTORCOPY
会话保存了整个Vim的外观. 视图保持一个窗口的属性
:mkview [num] "保存当前窗口的视图,num可以是1-9"
:loadview [num] "载入上次保存的视图,num可以是1-9"
:mkview ~/.vim/main.vim "保存当前的文件的视图到文件"
:source ~/.vim/main.vim "载入已存在的试图文件"
:set viminfo=string "string指代你要保存的东西. 其语法是一个选项字符跟一个参数. 一对对的选项/参数以逗号分隔",可用选项有:
: 要保存的冒号命令历史记录数
@ 要保存的输入历史记录数
/ 要保存的搜索命令历史记录数
r 可移动介质, 对此不会保存其标记信息(可以多次使用)
! 以大写字母开始并且不含有任何小写字母的全局变量
h 开始时禁用°hlsearch°选项
% 缓冲区列表(只有没指定文件参数启动Vim时才会恢复这些信息)
c 使用°encoding°选项中的方法进行字符编码转换
n viminfo文件的名字(必需是最后一个选项)
在Vim中用":wviminfo"和":rviminfo"命令来保存和恢复这些信息,
:wviminfo! ~/tmp/viminfo "保存一个viminfo的信息"
:rviminfo! ~/tmp/viminfo "读取一个viminfo的信息,这样可用把其他文件的viminfo那来用"
:mksession vimbook.vim "创建一个会话文件"
:source vimbook.vim "恢复一个会话状态"
vim -S vimbook.vim "启动Vim时恢复某个会话"
sessionoptions 选项的设置如下,如::set sessionoptions+=resize "恢复Vim窗口的大小"
blank 空窗口
buffers 所有的缓冲区, 而不仅是当前窗口中的
curdir 当前目录
folds folds, 包括手工创建的
help 帮助窗口
options 所以的选项和键映射
winsize 窗口大小
=============================================================
二、 在普通模式下
移动光标:
h 左 j 下 k 上 l 右
gj 下,长字符串行折行时只移动下一个屏幕显示行
gk 上,长字符串行折行时只移动下一个屏幕显示行
w (小)向后(右)移动一个word,光标在word的首字母处,如3w,向后移动3个word
b (小)向前(左)移动一个word,光标在word的首字母处,如3b,向前移动3个word
e (小)向后(右)移动一个word,光标在word的尾字母处,如3e,向后移动3个word
ge (小)向前(左)移动一个word,光标在word的尾字母处,如3ge,向前移动3个word
W (大)向后(右)移动一个word,光标在word的首字母处,如3w,向后移动3个word,但忽略其他边界字符
B (大)向前(左)移动一个word,光标在word的首字母处,如3b,向前移动3个word,但忽略其他边界字符
E (大)向后(右)移动一个word,光标在word的尾字母处,如3e,向后移动3个word,但忽略其他边界字符
gE (大)向前(左)移动一个word,光标在word的尾字母处,如3ge,向前移动3个word,但忽略其他边界字符
$ (shift 4)移动到当前行行尾,同功能键,可以使用“2$”记数,移动到下一行的行尾
^ (shift 6)移动到当前行的第一个非空白字符上,不接收记数移动
0 (数字)移动到当前行的第一个字符上,同功能键,不接收记数移动
f (小)向后(右)搜索某一单字符,光标在被搜索字符上,如“fy”,搜索下一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
F (大)向前(左)搜索某一单字符,光标在被搜索字符上,如“Fy”,搜索上一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
t (小)向后(右)搜索某一单字符,光标在被搜索字符前,如“ty”,搜索下一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
T (大)向前(左)搜索某一单字符,光标在被搜索字符前,如“Ty”,搜索上一个字符y的所在,可用“;”向后重复查讯,用“,”向前重复查讯
% 跳转到与当前光标下的括号相匹配的字符上记数+% 跳转到正文的某个部分,如"50%"将会把光标定位在文件的中间
gg 跳转到第一行
G 跳转到最后一行,可用"23G"等跳转到指定的行
H 跳转到本屏幕的开始
M 跳转到本屏幕的中间
L 跳转到本屏幕的结尾
zz 把当前行置为屏幕正中央
zt 把当前行置于屏幕顶端
zb 把当前行置于屏幕底端
删除字符:
x (小)删除一个字符,"4x"删除4个字符
d (小) 后跟任何一个位移命令, 它将删除从当前光标起到位移的终点处的文本内容,如:dd 删除一行字符,dw 删除一个word,"d4w"删除4个word,"d2e"删除2个word到词尾,"d$"删除自当前光标到行尾的内容.
c (小)删除一个word后并进入Insert模式,如:cc 删除一行后并插入一行(同"c$")
r 输入一个字符用以替换当前光标下的那个字符
J (大)删除一个换行符
u (小)撤销操作
CTRL-R 重做(反转撤消动作)
U (大)撤销上一次的操作,包括对自己的上次操作
快捷方式:
x 代表dl(删除当前光标下的字符)
X 代表dh(删除当前光标左边的字符)
D 代表d$(删除到行尾的内容)
C 代表c$(修改到行尾的内容)
s 代表cl(修改一个字符)
S 代表cc(修改一整行)
编辑命令:
i (小)在当前光标之前插入文本
a (小)在当前光标之后插入文本
o (小)当前行的下面插入新一行
O (大)当前行的上面插入新一行
9k 上移9行,其他命令也可用数字+命令的方式实现,重复的编辑操作
ZZ (大)保存当前文件并退出
放弃编辑:
:q! 放弃所有的修改并退出
:e! 放弃所有修改并重新载入该文件的原始内容
求助:
:help 得到帮助文件的起始点,等同于F1功能键
:help {subject} 得到某个特殊主题的帮助,如::help CTRL-A,查看关于CTRL-A的帮助
:help `command` 得到关于某个选项的帮助,如:help `number`
:help E37 得到某个错误ID号的帮助
三、 小技巧:
交换两个字母,“xp”
光标在字母中间时,删除整个单词,“daw”; 并可以用“.”重复操作来删除整个单词。“daw”即“Delete A Word”
修改整句话,即删除整句后加入一个空行,不包含句子后面的空格(是"Inner Sentence"的缩写),“cis”
修改整句话,即删除整句后加入一个空行,包含了句子后面的空格(是"a Sentence"的缩写),“cas”
修改整句话,即删除整句后加入一个空行,包含了句子后面的空白,“das”
用v进入visual模式,用as可以选择一个句子。
%s/\/newword/gc "把文件中所有的oldword替换成newword,如果没有‘c’则就不进行提示,"g"标志则指示替换操作将一行中所有出现的目标字串都进行替"
在filename1中打开filename2,并比较filename1和filename2
:edit filename2
:vertical diffsplit filename2
简单映射:使用":map"命令,把一连串Vim命令以一个按键来表示。":map"不带参数则列出已定义的映射。
:map i{ea} "在一个word的前后加上大括号"其中和为手工键入,而不是键盘上的功能键。当把一个vim功能键变为映射键后,就失去了原有的意义,至到映射被删除。
对字符串行进行排序:
第一种方法:
/^firstline
j
:.,/^$/-1!sort
说明:上面的命令首先会跳转到第一行, 即开头是"firstline"的行, 然后再下移一行, 用sort程序过滤自该行直至下一个空行.
第二种方法:
在Visual模式下选择要排序的行然后用"!sort"命令
反转行序:
:g/^/m 0
说明:g是命令global,m是命令move
对一串连续的行进行反转行序:
:`t+1,.g/^/m `t
说明:首先移到第一行并以"mt"标记该行.然后移到最后一行执行命令
统计文件全部内容的字数:
先键入"g",再用CTRL-g
统计文件部分内容的字数:
方法一:
将光标移到要统计部分的开头处执行"g CTRL-G"命令, 然后移到要统计部分的末尾再用一次"g CTRL-G". 计算两次命令得到的当前word位置之差, 就得到这部分内容的字数统计
方法二:
使用Visual模式, 选择要统计的部分. 然后用"g CTRL-G".
在编辑脚本或程序时查找帮助页:
光标移到要查找帮助的关键字上,然后键入"K"(大写),Vim会对光标所在的词执行"man"程序。
让man页与vim在一个窗口中显示:
首先运行man对应的文件类型plugin(可以把它放到vimrc文件里):
:source $VIMRUNTIME/ftplugin/man.vim
然后可以使用vim的"Man"命令对某些字符进行查讯帮助,如:"Man 3 echo"查找man页第三节中的echo,通过CTRL-W来切换当前窗口。
消除所有行尾的多余空格:
:%s/\s\+$//
说明:指定的行号范围是"%", 即应用于每一行中. ":substitute"命令要查找的字串是"\s\+$".这会查找位于行尾的一个或多个空白字符,":substitute"命令的"to"部分是空内容:"//". 即把此类的空白都替换为空。
查找一个word在何处被引用:
编辑所有包含了"frame counter"的C文件
vim \VimBacktick{}grep -l frame_counter *.c\VimBacktick{}
说明:"-l"参数, 所以该命令将只是列出包含了该词的文件名而不显示匹配的行。
如果你想查找所有C程序中的"error string", 就可以用下面的命令:
:grep error_string *.c
说明:跳转到下一个匹配的行使用":cnext"命令.跳转到前一个匹配的行可以用":cprev"命令, ":clist"命令则可以一次列出所有的匹配
注:内置的":grep"命令用到了外部命令grep(Unix)或findstr(Windows).
在":"号命令行中:
CTRL-C或 可以放弃所有已经键入的命令.
"CTRL-D"可以列出未用补全的命令。
"CTRL-P"可以向前返回已经输入过的命令,效果如同
"CTRL-N"可以向后返回已经输入过的命令,效果如同
q: 在屏幕底部打开一个命令行(小)窗口. 该窗口的内容是历史记录, 最后一行是空行。对命令行窗口作出的修改不会被保存. 历史记录不会因此被改写.
可以用CTRL-Z来挂起vim,并回到shell中,之后可用"fg"来回到vim中。
执行shell命令:
在Vim中:
:!{program} 执行{program},如!ls,!pwd,!shell等
:r !{program} 执行{program}并读取它的输出
:w !{program} 执行{program}并把当前缓冲区的内容作为它的输入
:[range]!{program} 以{program}过滤指定的行
vim -x exam.txt "加密文件exam.txt"
vim -x -n file.txt "加密file.txt文件,并不生成交换文件,注:Vim会把所有东西都放到内存里"
:setlocal noswapfile "可在编辑过程中禁止使用交换文件"
:X "(大写)设置对文件的加密"
:set key= "停止对一个文件的加密,把`key`选项设置为一个空字串"
vim -b datafile "编辑一个二进制文件"
:set display=uhex "设置以十六进制格式显示不可打印字符,"ga"命令可以来查明当前光标下字符的本来面目"
g CTRL-G "可以获知光标所在字符是整个文件中第几个字节"
2345go "转到第2345个字节去"
使用xxd程序编辑二进制文件的过程:
1 用vim -b datafile 打开二进制文件
2 用":%!xxd"进行十六进制格式的转储
3 编辑完毕后使用":%!xxd -r"反向转换,逆向转换时只有其十六进制形式被认为是有效的. 对可打印形式的改变会被转换程序忽略
:hide edit two.txt "在编辑另一个文件时而又想不保存当前的文件时,可用隐藏缓冲区的编辑"
:buffers 或:ls "列出整个缓冲区列表,"
列出的缓冲区列表说明如下:
u 未被列出的缓冲区|unlisted-buffer|[[译: 既然未被列出你又怎么知道? :ls! % 当前缓冲区
# 上一次的活动缓冲区
l 被载入并显示在某窗口中的缓冲区
h 被载入但隐藏的缓冲区.
= 只读的缓冲区
- 不可编辑的缓冲区, 其中°modifiable°选项被关闭
+ 有改动的缓冲区
:buffer [num] "在当前窗口编辑缓冲区"
:sbuffer [num] "打开一个并列的窗口编辑缓冲区"
:bdelete 3 "一个缓冲区从列表中去除"
:bnext "跳转到下一个缓冲区"
:bprevious "跳转到前一个缓冲区"
:bfirst "跳转到第一个缓冲区"
:blast "跳转到最后一个缓冲区"
:{range}center [width] 让一个范围的行居中
:{range}right [width] 让一个范围的行右对齐
:{range}left [margin] 让一个范围的行左对齐,[margin]指左边留白的宽度
左右对齐的方法:
1.使用宏包:runtime macros/justify.vim
2.使用外部程序:%!fmt
合并多行文本:
:g/./,/^$/join
说明:
:g/./ 一个全局命令, 查找那些至少有一个字符的行.
,/^$/ 指定一个范围, 从当前行开始(非空行)直到一个空行.
join ":join"命令把指定范围内的行连为一行.
重新格式化文件:
1.先修改所要修改的内容
2.用"v"命令进入Visual模式
3.选定所要重新格式化的内容后键入"gq"
4.其他格式化方式:"gqap"格式化一段文本(段以空行为分界). 包括当前光标之前的部分,"gggqG"格式化整个文件
dp "两个文件的不同被消除了, 当前窗口中引起不同的内容被放到另一窗口中缺少这段内容的地方去了. "dp"是"diff put"的缩写"
将光标移到右边的窗口, 到"changed"插入的位置.键入命令:do
vim也会消除了该位置的不同之处,"do"意为"diff obtain"
将"Last, First"改为"First Last",使用命令:
:%s/\([^,]*\), \(.*\)/\2 \1/
说明:替换操作的命令参数形如"/from/to/". 斜杠是用来分隔"from"和"to"的.对于"from"部分对应的内容:
第一个部分位于\( \)之间, 对应"Last" \( \)
匹配除逗号外的任何东西[^,]
任意次重复*
匹配", " ,
第二个部分位于\( \)之间, 对应"First" \( \)
任意字符 “.”
任意次重复 “*”
在对应"to"的部分我们指定了"\2"和"\1". 这在Vim中被称作反向引用. 它们可以用来指代此前在\( \)中匹配的内容. "\2"指代在第二个"\( \)"中匹配的内容, 也就是"First"部分, "\1"则指第一个\( \)中的内容,即"Last" 部分.
:iabbrev ad advertisement 每次键入"ad"时都自动扩展为"advertisement",可以用":iab"代替完整的命令名":iabbrev"
:abbreviations 命令可以列出当前定义的所有缩写
:unabbreviate + 缩写词替换词 命令可以用于删除一个缩写,但输入之后它还会再做一次替换才会生效。:abclear有同样的效果。
:abbreviate errword rightword 可以更正错误的输入
CTRL-V 命令可以保证你键入的下一个字符被原封不动地被录入(如特殊字符),支持ASCII,十六进制(前面加o),八进制输入(前面加x),16bit或32bit的数字(前面加u)
通过输入连续的三个键"CTRL-K加两个字母"可以键入键盘上没有的字符,用:digraphs可以查看可用的连字符
=============================================================
CRTL-G 显示正在编辑的文件的详细信息
CTRL-U 使文本向下滚动半屏
CTRL-D 使文本向上滚动半屏
CTRL-E 使文本向上滚动一行
CTRL-Y 使文本向下滚动一行
CTRL-F 使文本向后滚动一整屏(实际上是整屏去两行)
CTRL-B 使文本向前滚动一整屏
CTRL-O 跳转到更早些时间停置光标的位置(提示: O意为older).
CTRL-I 跳回到后来停置光标的更新的位置(提示: I在键盘上位于O前面,作用同键)
"CTRL-P" 对于重复的输入,按下"CTRL-P", Vim会根据已经输入的部分向前寻找,补全整个词
"CTRL-N" 对于重复的输入,按下"CTRL-N", Vim会根据已经输入的部分向后寻找,补全整个词
CTRL-X CTRL-F 文件名
CTRL-X CTRL-L 整行内容
CTRL-X CTRL-D 宏定义(也包括那些在include文件里定义的宏)
CTRL-X CTRL-I 当前文件和被当前文件include的文件
CTRL-X CTRL-K 来自一个字典文件的word
CTRL-X CTRL-T 来自一个thesaurus的word
CTRL-X CTRL-] tags
CTRL-X CTRL-V Vim的命令行
用`complete`选项来定制Vim在补全word时所用的策略,使用`ignorecase`选项,在搜索匹配的word时忽略大小写的不同。`infercase`. 它使搜索
匹配的word时忽略剩余部分的大小写。
在插入模式下,CTRL-Y会复制上一行的字母内容到当前行的光标处。
在插入模式下,CTRL-E会复制下一行的字母内容到当前行的光标处。
=============================================================
简单模式搜索:(使用正则表达式)
^ 字符匹配一行的开头,如"/^word"只匹配出现在一行开头的word
$ 字符匹配一行的末尾,如"/word$"只匹配出现在一行末尾的word
注:"/^the$",只会匹配到一行的内容仅包含"the"的情况. 有空白字符也不行
. 匹配除换行符外的任何单字符,如"/wo.d","."可以用"\."来匹配,在normal模式下也可用来做重复的动作,
标记跳转:
m{mark} 将当前光标下的位置名之为标记"mark".从a到z一共可以使用26个自定义的mark. 定义后的标记不在屏幕上显示,只在Vim内部记录所代表的位置
`{mark} mark就是你定义的标记的名字,如用"ma"标记"a"处,用"`a"跳转到标记a处
` 进行此次跳转之前的起跳点
`` 上次编辑该文件时光标最后停留的位置,跳回到上一个的出发点,可以在两点之间来回跳转
[ 最后一次修改的起始位置
] 最后一次修改的结束位置
:marks 列出已经标记过的标记列表
:jumps 列出曾经跳转过的位置列表
/string 用于向下搜索一个字符串,用“n”可以继续查找下一个,用“N”可以继续查找上一个
?string 用于向上搜索一个字符串,用“n”可以继续查找下一个,用“N”可以继续查找上一个
* 把光标定位于某个word上,对当前光标所在的word向下搜索
# 把光标定位于某个word上,对当前光标所在的word向上搜索
/\ 精确搜索单词word
查找一个文件:把光标置于所要查找的文件名上,然后键入"gf".当这个文件并不在工作目录下时,Vim会用在`path`选项中定义的目录去查找它. 该选项的内容是一个以逗号分隔的目录名列表,格式为::set path+=c:/prog/include.
或通过:find filename来查找。
或通过":sfind"命令来替代":find"命令,在新窗口中打开。
=============================================================
set nocompatible “设置默认模式为普通vim模式”
set backspace=indent,eol,start "在Insert模式下退格键何时可以删除光标之前的字符. 选项中以逗号分隔的三项内容分别指定了Vim可以删除位于行首的空格, 断行, 以及开始进入Insert模式之前的位置"
:set ignorecase 忽略大小写匹配
:set noignorecase 大小写的精确匹配
:set number 在每行的前面显示一个行号
:set nonumber 关闭行号显示
:set ruler 开启右下角的光标位置显示
:set noruler 关闭右下角的光标位置显示
:set hlsearch 高亮显示搜索结果
:set nohlsearch 关闭高亮显示搜索结果
:nohlsearch 去掉当前的高亮显示
:set incsearch 在键入目标字符串的过程中就同时开始搜索
:set wrapscan 搜索过程在文件内部循环进行(默认)
:set nowrapscan 搜索过程在文件内部只进行一次
set autoindent "在开始一个新行时对该行施以上一行的缩进方式."
set history=50 "设置冒号命令和搜索命令的命令历史列表的长度"
set ruler "总是在Vim窗口的右下角显示当前光标的行列信息"
set showcmd "在Vim窗口的右下角显示一个完整的命令已经完成的部分"
set incsearch "在键入要搜索的字串的同时就开始搜索当前已经键入的部分"
map Q gq "定义了一个"Q"命令映射到"gq"操作符命令,进入Ex模式"
filetype on "自动识别文件类型"
plugin on "用文件类型plugin脚本,对某种文件类型来说最常用的选项可以放在一个Vim中叫文件类型plugin的脚本里.请参考|write-filetype-plain|"
indent on "使用缩进定义文件,请参考jfiletype-indent-onj和°indentexpr°选项"
"autocmd FileType text setlocal textwidth=78 "
autocmd FileType text "是一个自动命令. 它所定义的是每当文件类型被设置为"text"时就自动执行它后面的命令."
setlocal textwidth=78 "在当前行已超过78个字符时,让Vim可以自动断行,这种设置只对当前的一个文件有效."
:options "打开选项帮助窗口"
:help `wrap` "获得选项关键字的详细解释"
:set iskeyword& "恢复一个选项值的默认设置"
:set nowrap "控制长行是否折到下一行显示的命令是"
:set sidescroll=10 "查看左右10个字符的上下文"
:set whichwrap=b,s "控制移动光标移动到行首或行尾时的操作,光标位于行首时按退格键会往回移动到上一行的行尾. 同时在行尾按空格键也会移动到下 一行的行首"
:set whichwrap=b,s, "左右箭头键在遇到行的边界时可以转行,在normal模式下"
:set whichwrap=b,s,,[,] "左右箭头键在遇到行的边界时可以转行,在Insert模式下"
:set list "设置制表符成为可见的字符"
:set listchars=tab:>-,trail:- "使制表符以">---"显示, 同时行尾空格以"-"显示"
:set iskeyword
[email=iskeyword=@,48-57,_,192-255]iskeyword=@,48-57,_,192-255[/email]
> "定义了一个word中可以包含哪些字符,"@"在这里代指所有的字母. "48-57"指ASCII码从48到57的那些字符, 即0到9. "192-255"是可打印拉丁字母,要去除一个字符使用操作符"-=",要添加一个字符使用操作符"+=""
:syntax enable "打开色彩"
:set background="/dark" "设置背景颜色为暗色(或light亮色)"
:colorscheme evening "选择颜色方案(evening),其他颜色方案在$VIMRUNTIME/colors目录中"
:source $VIMRUNTIME/syntax/2html.vim "把当前文件转到HTML格式"
:set autowrite "每当需要时就自动保存,不需要过问"
:set noautowrite "每当需要保存时,就过问"
:set backup "生成备份文件"
:set backupext=.bak "重新命名备份文件的后缀为.bak" 备注: 如果°backup°选项是关闭的但°writebackup°选项是打开的, Vim还会生成一个备份文件. 但是, 一旦该文件被成功地保存它就会被自动删除.
:set patchmode=.orig "对原始文件进行备份"
:set backupext=.old "指定对原始文件进行备份的后缀"
:write >> logfile "把当前文件的内容追加到logfile文件中"
:set fileformats=unix,dos "Vim能自动识别的格式的集合"
:set fileformat? "查看当前的文件格式,在vim中有三种格式,分别是:unix ;dos 和mac "
:edit ++fileformat=unix|dos|mac file.txt "强制指定文件file.txt的格式为unix,dos或mac,++fileformat可荐絬为++ff"
把一个dos格式的文件转换成unix格式可以通过以下两步完成:
:set fileformat=unix
:write
:set showmatch "键入"闭括号"时显示它与前面的哪个"开括号"匹配,对于大,中,小括号都适用"
:set matchtime=15 "设置键入某个闭括号时,等待时间的长短,时间单位是十分之一秒"
:set textwidth=30 限制每一行能有多少个字符。注:`wrap`选项使Vim能显示需要折行的过长的行, 但只是为了显示的需要, 并不在文件中实际插入一个换行符
:set autoindent "自动插入缩进"
>> "增加一行的缩进量"
: 打开一个文件或目录~
" o : 为文件或目录打开一个新的窗口~
" O : 在前一个被访问过的窗口中打开指定的文件/目录
" p : 预览文件/目录~
" i : 切换大小/日期的列表显示~
" s : 选择一个排序键r : 逆向排序~
" - : 进入父目录c : 进入目录
" R : 文件重命名D : 删除文件
" :help help-explorer得到更多信息~
使用当前的窗口
o 打开一个新窗口
O 使用最近使用过的其它窗口[[译: 如果只有当前窗口就打开新窗口]]
p 同O, 但同时还将光标定位于该窗口中
参考|preview-window|
i 切换显示文件的大小和日期/时间信息
s 光标所在的条目作为排序键进行排序. 首先用i命令打开
对文件大小和日期的显示. 然后将光标移到任一文件的大小
上按下s. 此时所有的文件都将按其大小进行排序. 光标置
于日期上时按s则会按其日期进行排序.
r 逆向排序当前的排序列表(either size or date)
c 将当前目录切换到当前光标所在的目录名. 接下来使用":edit"
命令时就无需附加路径名了
R 更改当前光标下的文件, Vim会提示你输入一个新的文件名[[译: 不支持目录更名]].
D 删除当前光标下的文件名. Vim也会提示你进行确认[[译: 不支持目录的删除]].
关于编程常用快捷键:
[ [ = 移动到前一个行首的'{'字符上, 等价于?^{
] ] = 移动到下一个行首的'{'字符上, 等价于/^{
[ ] = 移动到前一个行首的'}'字符上, 等价于?^}
] [ = 移动到下一个行首的'}'字符上, 等价于?^}
{ = 到前一个空行上
} = 到下一个空行上
gd = 到当前局部变量的定义处(当前的意思是光标停留其上的单词).
* = 到与当前单词相同的下一个单词上
# = 到与当前单词相同的上一个单词上
'' = 到上次光标停靠的行
ctags:
[/home/someuser/src]$ ctags * "以源程序目录下所有文件作为参数"
[/home/someuser/src]$ vi -t foo_bar "在命令行上启动vi程序时通过-t选项加要跳转的程序元素名"
灾难恢复
vim -r "Vim会读取交换文件(这正是存放你已编辑的文件的地方)以及你的原文件的一些信息."
|swap-file| "关于交换文件的位置和命名"
|preserve| "手工刷新交换文件"
|swapname| "查看原文件及其交换文件的名字"
`updatecount` "连续击键多少次后做一次同步"
`updatetime` "多长时间之后做一次同步"
`swapsync` "同步交换文件时是否同时做一次磁盘同步"
`directory` "列出存放交换文件的目录"
`maxmem` "尚未写入交换文件的内容所受的内存限制"
`maxmemtot` "同上, 但是针对所有文件."
=============================================================
注意"o"和"O"在Visual模式与Normal模式下行为迥异, 在Normal模
式下它们是在当前行的下面或上面插入一个新行.
=============================================================注:汉字的空格不被视为空白字符
要改变Vim对word边界的定义, 请查看°iskeyword°选项
用%处理哪些括号可以由`matchpairs`选项来定义与滚屏相关的命令, 请参考jQ scj.若要一直保持当前行的前后都有一些内容显示在屏幕上, 请参考`scrolloff`选项.
问题:在使用*键时,但如果要匹配一小片包含了几个word的文本呢?如何避免手工键入?
答案: Visual select, yank, :let @/=@", n
在使用:set hlsearch时,如果排除函数外别处同名变量的干扰呢? 答: j/\%:let current_reg = @"gvs=current_reg "让"p"可以在Visual模式下以此前yank的内容替换当前选择的文本块"
if has("vms")
set nobackup
else
set backup
endif 在覆盖一个文件之前备份该文件. 但是对VMS系统除外, 因为该系统已经为文件保存了老的版本. 备份文件名由当前文件名
加后辍"~"组成. 请参考|07.4|
if &t_Co > 2 || has("gui_running")
syntax on
set hlsearch
endif 打开语法高亮功能, 前提是当前系统支持彩色显示. `hlsearch`告
诉Vim高亮显示所有与最后一次搜索目标串相匹配的文本
autocmd BufReadPost *
\ if line("°\"") > 0 && line("°\"")
发表评论
-
linux Kill多个进程
2011-11-10 11:59 1144经常需要Kill多个进程,这些进程包含共同的关键字,可以用一条 ... -
让 putty 登陆Linux时 标签栏动态显示当前ip
2011-11-04 13:26 27011. 在/etc/profile的最后几行改一下即可。 # ... -
>/dev/null 2>&1
2011-11-04 11:06 1031>/dev/null 2>&1 os.s ... -
postgresql 导入和导出数据
2011-09-22 10:59 6281自oracle自收购sun以来,牵起了对java的种种纠纷, ... -
PostgreSQL安装和简单使用
2011-09-21 16:08 1642PostgreSQL是现在比较流行的数据库之一,这个起源于伯克 ... -
vim全局替换命令
2011-09-20 11:33 1173语法为 :[addr]s/源字符串 ... -
linux shell编程if语句内判断参数详解
2011-09-19 11:45 1123第一个参数代表$1,第 ... -
关于Linux Grep命令使用的详细介绍
2011-09-19 11:12 22211. grep简介 grep (global sear ... -
svn add "already under version control"
2011-09-16 18:13 2014The best solution I can think o ... -
linux 查看文件夹大小
2011-09-16 17:01 776du -sh * 查看当前目录下的文件夹大小 du 命令 ... -
linux 用户,组相关命令
2011-09-16 10:31 1000linux用户管理常用命令 ... -
如何同时启动多个Tomcat服务器(转)
2011-09-16 10:05 858前些时日,出于某种需要,需要同时启动多个Tomcat服务器,在 ... -
linux中把命令变成自动启动服务(转)
2011-09-15 18:11 1644备注一下()内的内容为解释,使用的时候请删除以免出错 #!/b ... -
从侵权看Java、Harmony及Android的未来(转)
2011-09-11 20:18 1369如果你看过之前的文 ... -
在linux下,如果让当前显示的是全路径
2011-09-07 11:51 1627PS1的参数设置 在fc中 默认的PS1="[\u@ ... -
如何创建linux命令 别名--”快捷方式”或”自定义命令”(转)
2011-09-07 10:55 7489对于经常使用linux的朋 ... -
linux-Vi使用方法(备查)
2011-09-07 10:16 846vi编辑器是所有Unix及Linu ... -
linux vi编辑器(转)
2011-09-07 10:15 889经过长时间学习linux vi ... -
Putty的全屏与退出(转)
2011-09-07 09:03 5233最近学习Linux,在电脑上安装了Putty做远程登录,偶然全 ... -
让putty支持中文输入和显示(转)
2011-09-06 22:42 2938让putty支持中文输入和显示 对于经常在windows下远程 ...
相关推荐
《笨方法学 Vim Script》是一本专为 Vim 用户编写的指南,旨在帮助用户深入理解并掌握 Vim 的内置脚本语言——Vim Script。通过实践和探索,你可以逐步提升在 Vim 编辑器中的效率和定制化能力。Vim Script 是 Vim ...
【vim plugin vim changes to ide update】这一主题表明我们将探讨如何使用Vim插件来提升其作为集成开发环境(IDE)的功能。在这个过程中,我们将重点分析新增的三个插件:wintagexplorer.vim、echofunc.vim以及vimrc...
"vim-configure.tar.gz_vim_vim_configure" 是一个包含了 Vim 配置文件的压缩包,旨在帮助用户优化 Vim 的使用体验,提供自动提示、补全功能以及代码高亮等特性。 在 Vim 中配置这些功能,可以使编辑效率大幅提升。...
以下是在几种常见的Linux发行版中安装Vim的方法: 1. **Ubuntu/Debian**: 使用`apt`命令 ``` sudo apt-get update sudo apt-get install vim ``` 2. **Fedora/CentOS/RHEL**: 使用`yum`或`dnf`命令 ``` sudo...
17. **在VIM中使用GDB调试**:阐述了如何在vim中集成gdb进行程序调试,以及vim的编译方法。 这个系列教程全面地介绍了vim的高级特性,旨在提升用户对vim的熟练程度和使用效率,对于开发者来说是一份宝贵的资源。...
由于提供的文件信息中包含了Vim 8.2的PDF用户手册的结构和内容概览,我们可以从提供的内容中提炼出关于Vim编辑器的知识点,这些知识点覆盖了Vim的基本使用、编辑技巧、高级功能以及如何在不同情况下高效使用Vim。...
### Ubuntu下升级与安装指定版本Vim的方法 #### 背景介绍 Vim是一款功能强大的文本编辑器,因其高效性和可定制性受到广大开发者的喜爱。在Ubuntu系统中,默认安装的Vim版本可能无法满足某些用户的特定需求,比如...
vim中文手册 vim中文手册 vim中文手册 vim中文手册 vim中文手册 vim中文手册 vim中文手册vim中文手册vim中文手册
VIM是一个功能强大的文本编辑器,其使用方法涵盖了移动光标、文本编辑、命令执行等多个方面。在VIM的使用中,移动光标是基本操作之一。用户可以通过按键“h”向左移动光标,“j”向下移动光标,“k”向上移动光标,...
VIM的使用帮助,方法等等,可以快速的学习到VIM的使用。很好很强大。
在没有网络连接的情况下,为CentOS 7安装Vim需要通过手动下载所需软件包并使用本地安装方法。以下是离线安装Vim在CentOS 7中的详细步骤。 首先,你需要确保拥有一个包含所有必要依赖的软件仓库。CentOS 7的默认软件...
本篇文章将深入探讨`vim`在Linux环境下的使用方法。 1. **启动与退出Vim** - 启动`vim`:在终端输入`vim 文件名`即可创建或打开一个文件。 - 退出`vim`: - `Esc`键进入正常模式,然后`:q`退出(如果未保存修改...
在Ubuntu系统中,Vim(Vi IMproved)是一款强大的文本编辑器,被广泛用于编程和其他文本操作。离线安装Vim对于没有网络连接或者网络不稳定的情况尤为重要。以下是如何在Ubuntu上离线安装Vim的详细步骤,以及相关知识...
离线安装Vim是Linux系统用户在没有网络连接时安装软件的一种常见方法,尤其是在服务器环境或者网络条件有限的场合。本教程将详细介绍如何通过提供的离线资源安装Vim编辑器。 Vim(Vi Improved)是一款强大的文本...
例如,如果使用tar,命令可能是`tar -zxvf vim-lib.tar.gz`。 3. **进入解压后的目录**:使用`cd`命令切换到解压后的目录,这样你就可以看到所有的rpm包文件。 4. **安装vim及依赖**:在当前目录下,运行`rpm -ivh...
Vim编辑器
VIM(Vi IMproved)是一款强大的文本编辑器,尤其在编程领域中被广泛使用,因为它提供了丰富的自定义功能和高效的操作方式。对于PHP开发者来说,配置一个适合自己的VIM环境可以显著提高编码效率。以下是对"VIM FOR ...
安装这两个deb文件的方法是在终端中使用`dpkg`命令: ```bash sudo dpkg -i vim-runtime_8.1.2269-1ubuntu5.7_all.deb sudo dpkg -i vim_8.1.2269-1ubuntu5.7_amd64.deb ``` 如果安装过程中遇到依赖性问题,可以...
Vim是一款强大的文本编辑器,深受程序员喜爱,尤其在Linux和Unix环境中广泛使用。它具有高度可配置性和扩展性,用户可以通过安装不同的插件和配置文件来增强其功能。在这个场景中,我们关注的是`c.vim`和`cpp.vim`...
Vim的安装过程相对简单,尤其是当你手头有一个名为"vim.zip"的压缩包时,解压后即可直接使用。 一、Vim的基本介绍 Vim是Bill Joy的Vi编辑器的增强版本,它在保留了Vi原有的强大功能的基础上,增加了许多新的特性,...