Vim常用命令
光标移动:
w :光标以单词向前移动 nw:光标向前移动n个单词 光标到单词的第一个字母上
b :与w相反
^ :移动光标到行首第一个非空字符上去
$ :移动光标到行尾第一个非空字符上去
% :移动到与制匹配的括号上去(),{},[],<>等。
nG :跳转到第n行。
可视模式
v :可视模式
V :选择行
CTRL-V or CTRL-Q :选择块
文本操作
复制操作
y :复制选择的内容
ye :复制一个单词
yy :复制一行
yy 命令复制当前整行的内容到vi缓冲区
yw 复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词
y$ 复制光标所在位置到行尾内容到缓存区
y^ 复制光标所在位置到行首内容到缓存区
#yy 例如:5yy就是复制5行
#yw 例如:2yw就是复制两个单词
如果要复制第m行到第n行之间的内容,可以在末行模式中输入m,ny例如:3,5y复制第三行到第五行内容到缓存区。
p :粘贴
x :可视模式下,x为剪切选择内容
viw :选中光标当前所在处的单词
yiw :复制光标当前所在处的单词
vi下的复制方法
方法一:先ma标记当前位置为a,移动到新的位置,再y`a或者y’a复制从标记位置a到 当前位置的内容。`和’的区别:`以字符为单位,’以行为单位。这个方法应该是所有vi 都适用的。
选择寄存器复制内容
这有点复杂.把这节拿出来,多看几遍;还有,一定要多做实验.
“< 字母>yy可以把一行文本拷贝到寄存器中(这里的寄存器是vi的术语,指可以存放剪切和 拷贝下来的东西的地方), <字母>里面的字母必须是a到z之间的一个. “<字母>dd可以把 一行剪切下来放到寄存器里面. 你可以在yy或者dd前面用数字指明要拷贝或者剪切的行数.如果<字母>中的字母是大写的话,意味着把文本插入到寄存器中已有的文本之前. “<字母>p把文本插入到光标之后,”<字母>P把文本插入到光标之前.如果寄存器中含有某一行的开头或结尾,这一行将会被放到另一合适的行. Y是yy的快捷方式. 还有, y$, yH, yM,等等,都是可以用的.d命令也是一样的.如果要快速的剪切和粘贴, 你就无须指定寄存器了.如果这样的话,你就不能往寄存器里面添加文本了.而且只要有一个删除命令的话, 寄存器中的东西就没有了(包括x命令). 举例来说,如果要移动上一段的话,你可以把光标 移到段落的开头,敲”a13dd,再把光标移到你想要放文本的地方,敲”ap,就可以把那段文本放到光标所在的行后面. 现在,大概你想要剪切和粘贴文本到不是行末尾的区域去.我们 来看如何做到这一点:我们可以使用 m<字母> 命令来标记一个区域,这个字母可以和 剪切/粘贴寄存器的字母相,因为它们是保存在内存中的不同位置. 然后, 敲”<寄存器>`<字母>[yy或者dd], 这里的寄存器就是要保存文本的那个寄存器,<字母> 是用来标记的,yy和dd是你的操作.
~ :修改光标下字符的大小写,并移动到下一个字符。这不是一个操作符 (除非设置了 ’tildeop’),所以你不能连接一个动作命令。这个命 令在可视模式下也有效,它会改变被选中的所有文本的大小写。
I :移到当前行的第一个非空字符并启动插入模式
A :移动到行尾并启动插入模式
o :在当前行的下面另起一行
O :在当前行的上面另起一行
删除操作(命令模式使用)
x删除光标处的单个字符
dd删除光标所在行
dw删除当前字符到单词尾包括空格的所有字符
#x例如3x删除光标处向右的三个字符
#dd例如3dd从当前行开始向下删除三行文本
dw :删除一个单词,需将光标移到单词的第一个字母上,按dw,如果光标在单词任意位置,用daw
dd :删除一行
cw :修改一个单词
dtx :从光标所在处开始,删除到”x”。
d/text :删除从文本中出现”text”中所指定字样的位置, 一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容
cc :改变整行
C$ :改变到行尾
shift + < 左移一行
shift + > 右移一行
<%或>% :来将{,(或[等符号括起来的文本都左移或右移;这时候,你必须把光标放在这些符号({,(或[)上面.
u :undo
CTRL+R :re-do
J :合并一行
CTRL+p :自动完成功能(在输入模式使用)
CTRL+g :查看当前文件全路径
:n1,n2 co n3 :将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
:n1,n2 m m3 :将 n1 行到 n2 行之间的内容移至第 n3 行下。
:n1,n2 d :将 n1 行到 n2 行之间的内容删除。
:n1,n2 w filename :将 n1 行到 n2 行之间的内容保存到文件 filename 中
使用剪贴板
"*y :将内容复制到剪贴板
"*p :将剪贴板的内容粘贴出来
存盘:
:q! :不存盘退出
:e! :放弃修改文件内容,重新载入该文件编辑
:wq :存盘退出
:w :存盘
:browse o :用浏览器打开文件
:browse w :用浏览器保存文件
:wqa :保存并关闭所有文件
:qa :关闭所有文件
:browse wa :用浏览器保存所有文件
u: 撤销前一次的操作
ZZ:保存当前文档并退出VIM
帮助
:help :查看帮助文档,在这之中,按CTRL+] 进入超连接,按CTRL+O 返回。
:help subject :看某一主题的帮助,ZZ 退出帮助
:help {主题} :例如,要获得 “x” 命令的帮助,输入如下命令:
:help x
:help CTRL-A
查找
fx :移动到一个指定的字符,单字符查找命令是最有用的移动命令之一。”fx” 命令向前查找本行中的字符 x。提示:”f” 表示 “Find”。
/pattern :正方向搜索一个字符模式
?pattern :反方向搜索一个字符模式
然后按n 继续向下找
精确查找整个单词 :如果你输入 “/the”,你也可能找到 “there”。要找到以 “the” 结尾的单词,可以用:
/the\>
“\>” 是一个特殊的记号,表示只匹配单词末尾。类似地,”\<” 只匹配单词的开头。 这样,要匹配一个完整的单词 “the”,只需:
/\
把光标放到某个单词上面,然后按*号键,表示查找这个单词。”#” 命令在反向完成相同的功能。
查找整个单词:/\
:set hlsearch :高亮显示查找到的单词
:set nohlsearch :关闭改功能
查找替换:
way1:
/【word】 :查找某个word
? 命令功能与 “/” 的功能类似,但是是反方向查找
cw【newword】:替换为新word
n: 继续查找
.: 执行替换
way2:
:s/string1/string2/g:在一行中将string1替换为string2,g表示执行 用c表示需要确认
:num1,num2 s/string1/string2/g:在行num1至num2中间将string1替换为string2
:1,$ s/string1/string2/g:在全文中将string1替换为string2
如果替换时需要确认,在g后面加上一个c(confirm)
如果要全文搜索,在”s/”前面加上一个%,例如”:% s/”
书签
m[a-z] :在文中做标记,标记号可为a-z的26个字母,用`a可以移动到标记a处
“ :最后编辑的位置
:marks :你可以用如下命令取得所有的标记的列表:
r:替换当前字符
nr字符:替换当前n个字符
分割窗口
:split :分割一个窗口
:split file.c :为另一个文件file.c分隔窗口
:nsplit file.c :为另一个文件file.c分隔窗口,并指定其行数
CTRL+W :在窗口中切换
:close :关闭当前窗口
写文件
:n1,n2 write temp.c 将本文件中的n1,到n2行写入temp.c这个文件中去
宏命令
q[a-z] 开始记录但前开始的操作为宏,名称可为【a-z】,然后用q终止录制宏。
用reg显示当前定义的所有的宏,用@[a-z]来在当前光标处执行宏[a-z].
设置
前提操作:如果你不知道你的 vimrc 在什么地方,可以使用如下命令
:scriptnames :确认设置文件的路径。
:set nocompatible :与Vi兼容
:set ruler :总在 Vim 窗口的右下角显示当前光标位置。
:set showcmd :在 Vim 窗口右下角,标尺的右边显示未完成的命令。例如,当你输入 “2f”,Vim 在等你输入要查找的字符并且显示 “2f”。当你再输入w,”2fw” 命令被执行,”2f” 自动消失。
:set incsearch :在查找模式输入完前显示匹配点。
:map Q gq :这定义一个键映射。下一节会介绍更多的相关内容。这将定义 “Q” 命令用来完成与 “gq” 操作符相同的功能,这是在 Vim 5.0 版前 “Q” 命令的作用。如果没有设置这个映射, “Q” 会启动 Ex 模式,这也许不是你想要的情况。
:set number / set nonumber :显示/不显示行号
:set ruler /set noruler :显示/不显示标尺
:set sy on :设置语法高亮
:set colo {theme} :设置主题颜色
:set guifont=Courier_New:h10:cANSI :设置字体
:set tabstop=4 :设置tab键的宽度
:set nobackup :不要备份
:set nowritebackup :不要备份
au GUIEnter * simalt ~ :界面最大化
简单键盘映射
:map :查看当前系统的键盘映射。
映射可以使你把一系列 Vim 命令绑定为一个单键。假设你要用一个大括号将一个特定的 单词括起来。例如,把 “amount” 变成 “{amount}”。用 “:map” 命令,就可以让 F5 来 完成这个工作。命令如下:
:map
Note:
在输入这个命令时,
让我们来分解一下这个命令:
i{
e 移动到词尾。
a}
执行 “:map” 命令后,要在单词两端加上 {},只需要移到单词上的第一个字符并按 F5。
在这个例子中,触发器是一个单键;它还可以是任何字符串。但若你使用一个已经存在 的 Vim 命令,该命令将不在有效。所以你最好避免出现这种情况。 一个可用于映射的键是反斜杠。因为你很可能想定义多个映射,那就加上另一个字符。
你可以映射 “\p” 为在单词两端加园括号,而映射 “\c” 为加花括号,例如:
:map \p i(
:map \c i{
你需要在敲入\后,立即敲入p,以便 Vim 知道它们组成一个命令。
如果组合键中间有CTRL,就要缩写为C,例如CTRL-Tab要写成
常用选项
Vim 中有很多选项。大部分你很少用得上。我们在这个介绍一些常用的。别忘了你可以 通过 “:help” 命令获得更多的帮助。方法是在选项命令前后加上单引号,例如:
:help ‘wrap’
如果你搞乱了一个选项,你可以通过在选项后加上一个 & 号把它恢复到默认值。例如:
:set iskeyword&
禁止折行
Vim 通常会对长行自动换行,以便你可以看见所有的文字。但有时最好还是能让文字在一 行中显示完。这样,你需要左右移动才能看到一整行。以下命令可以切换换行方式:
:set nowrap
当你移到到那些不能显示的文字上,Vim 会自动向右滚动让你看到后面的文字,要一次滚 动十个字符,这样就行了:
:set sidescroll=10
这个命令不改变文件中的文字,只改变显示方式。
Tab操作
tabs :查看当前打开的tab的文件路径。
tabnew :新建tab。
tabnext,gt :切换到下一个tab。
tabprevious,gT :切换到上一个tab。
tabclose :关闭当前tab。
tabfirst :切换到第一个tab。
tablast :切换到最后一个tab。
tabrewind :切换到上一个激活过的tab。
批量注释
移动光标到需要注释掉的第一行开头,然后按Ctrl-v(如果使用了VIM的mswin.vim,则Ctrl-v表示粘贴,这时需要用Ctrl-q代替)进入Visual blockwise模式,这个模式是Visual mode的一种,相当于UltraEdit中的块选择。然后按j选择上所有需要注释行的行首(看起来效果是选择了第一列),输入I//再按ESC就可以在每一行开头插入//了。
折叠文本
zf :折叠你选中的文本。
zd :展开你光标所在处的折叠文本。
zD :展开所有折叠的文本。
缩写
VI/VIM支持用一个缩写字符串代替一个长的字符串,比如 :ab hw hello world, 然后在Insert mode下输入“hw ”(不包括引号)后VIM就自动替换成了“hello world”。
制作帮助
把帮助文件放到\vim\vim~\doc\文件夹中
文件必须是.txt文件,文件首必须是”*filename*”,例如:*usual_command.txt*
在文件中添加关键字,例如”*usual*”,然后在Vim中通过:help usual打开帮助文件
在vim中,执行:helptags ~vim\doc