首页 > 代码库 > 【Vim】实用命令行
【Vim】实用命令行
在vim中高亮关键字
syntax enable
可以高亮关键字:一般后面还要在跟一个syntax on
打开语法高亮syntax clear
清除关键字高亮
在secureCRT不是xterminal模式的时候,试了一下,没起作用啊,如果是xterminal模式的时候是会起作用的
在vim中查找
/
后面跟要查找的字符串:从当前光标位置向上搜索?
后面跟要查找的字符串:从当前光标位置向下搜索n
找下一个N
找上一个
清除并重画屏幕
[Ctrl+l]
组合键
vim快捷键定制
- 对于键盘符号,可以使用:help key-notation查看帮助
定制编辑环境
set命令用来定制编辑环境。
set showmode
当vi处在输入模式下时显示提示信息set sm
即时显示配对的)或}set ts=n
把制表符设置为n(默认为8)set ai
下一行从前一行的缩进位置开始set number
在编辑器中显示行号set nonu
取消在编辑器中的行号显示set hlsearch
高亮显示搜索到的字符串set incsearch
输入字符串就马上显示匹配点set ruler
标尺,用于显示光标位置的行号和列号,逗号分隔。每个窗口都有自己的标尺。如果窗口有状态行,标尺在那里显示。否则,它显示在屏幕的最后一行上。set cindent
:cindent控制缩进量是通过shiftwidth选项的值,而不是通过tabstops的值,shiftwidth的默认值是8set shiftwidth
:改变shiftwidth的值set helplang=cn
:vim帮助文档无法显示中文时,加入这句试试set encoding=utf-8
:colo murphy
:有的时候使用vim打开文件时,显示的颜色不适合阅读,可以使用这条命令将配色改成这种黑底
我在gvim中使用了上面的方法进行了设定,但是貌似没有起到作用,不知道是我使用得不对还是另有原因
移动光标
h
光标左移l(或空格键)
光标右移k(或[Ctrl+p])
光标上移j(或[Ctrl+n])
光标下移[Ctrl+f]
向前翻页[Ctrl+b]
向后翻页[Ctrl+d]
向前翻半页[Ctrl+u]
向后翻半页1G
跳到文件首40G
跳到第40行G
跳到文件尾[Ctrl+g]
显示当前行号及文件的百分比Ctrl +E
scroll downCtrl +Y
scroll up
在一行内移动光标
B、E和W命令的作用与b、e和w的作用一样,只是后者忽略了标点符号。
b
向后移动到单词首e
向前移动到单词尾w
向前移动到单词首0
或| 移动到行首30|
移动到第30列^
移动到本行的第一个单词的首字符$
移动到行尾: num
跳转到指定行号
插入文本
i
在光标的左侧插入字符20i-[Esc]
插入20个连字符I
在行首插入字符a
在光标的右侧添加文本A
在行尾添加文本o
在当前行下面插入一空行O
在当前行上面插入一空行
选择文本
ve
:选择整个单词yw
:复制光标所在的单词5yl
:复制5个字符的输入
删除和移动文本
x
删除光标所在的字符6x
删除光标位置的字符以及右侧的5个字符X
删除前一个字符dd
删除当前行4dd
删除4行dw
删除一个单词d0
删除到行首d$
删除到行尾d
删除一个区域(只用于vim)p
把被剪切的文本粘贴到下面(整行)或右侧(部分行)P
把被剪切的文本粘贴到上面(整行)或左侧(部分行)add
把当前行粘贴到缓冲区a里ap
把缓冲区a里的内容粘贴到当前位置J
把当前行于下一行合并为一行xp
调换两个字符的位置(其实它是删除一个字符,然后再又粘贴一个字符)
一些对程序员特别有用的快捷键
[[
= 移动到前一个行首的{
字符上,等价于?^{
:其实就是查找上一个函数]]
= 移动到下一个行首的{
字符上,等价于/^{
:其实就是查找上一个函数[]
= 移动到前一个行首的}
字符上,等价于?^}
:用起来感觉不是很方便][
= 移动到下一个行首的}
字符上,等价于?^}
:用起来感觉不是很方便f
= 到前一个空行上g
= 到下一个空行上gd
= 到当前局部变量的定义处(当前的意思是光标停留其上的单词).:使用之后所有与当前光标所在的单词匹配上的单词都高亮了gD
:跳转到变量定义的地方*
= 到与当前单词相同的下一个单词上#
= 到与当前单词相同的上一个单词上‘‘
= 到上次光标停靠的行%
:可以让光标移动到与他相匹配的括号上去:这个非常有用>
增加缩进,x>
表示增加以下x行的缩进<
减少缩进,x<
表示减少以下x行的缩进syntax enable
+syntax on
打开语法高亮
修改文本
rch
把光标位置的字符替换为chR
替换光标右边的文本s
把光标所在的字符替换为任意个字符S
替换整行内容cw
修改一个单词c
修改区域里的文本(vim)~
改变所扫描的或区域里的字母的大小写!tr‘[a-z]‘‘[A-Z]‘
把区域里的字母转换为大写(vim)!tr‘[A-Z]‘‘[a-z]‘
把区域里的字母转换为小写(vim)
vim 的tab相关
vim 从 vim7 开始加入了多标签切换的功能, 相当于多窗口。之前的版本虽然也有多文件编辑功能, 但是总之不如这个方便啦。
:tabnew
[++opt选项] [+cmd] 文件 : 建立对指定文件新的tab:tabe
在一个新tab中打开指定的文件:tabc
关闭当前的tab:tabo
关闭所有其他的tab:tabs
查看所有打开的tab:tabp
前一个:tabn
后一个
标准模式下:
gt
,gT
可以直接在tab之间切换:help table
:详细用法请查看相关帮助文档
Vim比较两个文件
vim -d file1 file2
直接打开两个文件对比vim file1
打开第一个文件,然后使用vert diffsplit file2
打开第二个文件进行对比;vert
表示垂直分割窗口,默认为水平分割窗口- 直接对比两个文件的不同:使用
diffthis
分别在两个窗口输入; [c
,]c
定位不同点: 分别跳到前一个、后一个不同点;ctrl-w w
:窗口跳转: 跳到下一个窗口ctrl-w h/l
: 跳到左侧(右侧)窗口ctrl-w j/k
跳到上方(下方)窗口dp
文档合并:将差异点的当前文档内容合并到另外一个文档(diff put)do
将差异点的另一个文档内容拷贝到当前文档zo
临时展开被折叠的相同内容zc
重新折叠
复制文本
yy
复制当前行6yy
复制六行yw
复制单词y
复制区域(vim)p
把复制的文本粘贴到右边或下面P
把复制的文本粘贴到左边或上面"ayy
把当前行复制到缓冲区a里"ap
恢复缓冲区a里的内容
启动编辑器
vi +100 foo
打开文件foo并把光标定位在100行vi +/pat foo
打开文件foo并把光标定位在pat第一次出现的行vi +foo
打开文件foo,把光标定位在文件尾vi foo1 foo2
... 打开文件foo1,用n切换到foo2等vi -r foo
把交换文件里的内容恢复到缓冲区里vi -R foo
一只读模式打开foo文件
保存与退出
:w
保存文件并继续编辑:w bar
同微软Windows操作系统中的“另存为……”:w! bar
同上,但是覆盖现存的文件bar:n1,n2w foo
把n1到n2之间的行保存到文件foo:n1,n2w>>foo
把n1到n2之间的行添加到foo文件尾:.w foo
把当前行保存到文件foo:$w foo
把最后一行保存到文件foo:x
保存并退出编辑器:wq
同上:q
如果文件的内容没有变化则退出编辑器:q!
放弃修改并退出编辑器
vim中目录浏览
:E
:打开vim默认路径的文件夹–
:到上级目录D
:删除文件(大写)R
:改文件名(大写)s
:对文件排序(小写)x
:执行文件
多文件编辑
如果当前行还没有保存(并且 autowrite 未设置),则不能使用:e、:n和:rew命令。命令后面的!使得安全特性无效。
:e foo
停止对当前文件的编辑,开始编辑foo文件:e! foo
同上,但是取消对当前文件的修改:e!
装入当前文件的最近保存的内容[Ctrl+^]
返回到最近编辑的文件:n
编辑下一个文件(当用vi同时编辑多个文件时):set autowrite(aw)
在用:n切换到下一个文件之前自动保存当前文件:rew
返回到文件列表的第一个文件(当用vi同时编辑多个文件时):r foo
把foo文件的内容插入当前行的下面
多窗口(vim)
:sq
把当前窗口拆分为两个:new
打开一个新的空白窗口:[Ctrl+w][Ctrl+w]
在窗口之间切换 Ctrl+w+R 将窗口移到右边 Ctrl+w+L 将窗口移到左边:on
把当前窗口变为唯一的窗口:q
退出当前窗口:qa
退出所有窗口:xa
保存并退出全部窗口[Ctrl]+
增大窗口尺寸[Ctrl]-
减小窗口尺寸
搜索与重复
搜索模式pat可以时一个字符串,也可以是一个正则表达式。vi使用一套专用的字符序列来执行一行内的搜索。
/pat
向前搜索pat?pat
向后搜索pat/printf
向前搜索printf?[0-0]$
向后搜索行尾的数字/^#
向前搜索行首的#n
按上次搜索方向重复搜索N
按与前次搜索的相反方向重复搜索:set wrapscan(ws)
继续搜索直至达到文件尾:set ignorecase(ic)
搜索时不区分大小写:set magic
保留正则表达式字符的意义fc
在当前行向前搜索字符cFc
在当前行向后搜索字符c;
在当前行重复上次向前搜索,
在当前行重复上次逆向搜索*
:向下查找光标所在的单词,类似于/
#
:向上查找光标所在的单词,类似于?
替换
源模式s1也可以是正则表达式。使用欧冠地址时,"."代表当前行,"$"代表最后一行,"1,$"代表整个文件。
:.s/s1/s2
把当前行中第一次出现的s1替换为s2:1,$s/s1/s2
把整个文件里的s1替换为s2:1,$s/echo/printf/g
把全部的echo替换为printf:1,$s/s1/s2/gc
按交互方式把全部s1替换为s2:1,$s/#//g
删除文件中所有的“#”:3,10s/^/#/g
在3至10行的行首插入“#”:$s/$/;/
在最后一行的行尾插入“;”:1,$s/s1/s2/g
把所有的s1替换为s2:1,$s/HEAD/<&>/g
把所有的HEAD替换为
标志与书签
ma
设置一个标签a‘a
移动到标签a"
在当前标志与前一个标志位置之间切换
重做与恢复
.
重复上次命令u
取消上次的编辑命令(在vim里取消所有以前的命令)[Ctrl+r]
重做上次取消的操作(只限于vim)U
取消所有对当前行的操作"4p
从缓冲区中恢复第4次最近的删除操作
缩写表示
:ab name stg
把name缩写为stg:unab stg
删除stg缩写:ab
列出所有的缩写
映射键
:map key commands
把key映射到commands:map! key commands
在输入模式下把key映射到commands:unmap key
取消命令模式下的key映射:unmap! key
取消输入模式下的key映射:map
显示命令模式下所有的映射:map!
显示输入模式下的所有映射
与UNIX的接口命令
:!cmd
执行UNIX的cmd命令:!%
把当前文件作为shell或perl脚本执行:r !cmd
把cmd命令的结果插入到当前行的下面:r !head -n 3 foo
把foo文件前三行内容插入到当前行的下面sh
暂时退出UNIX shell 环境[Ctrl+z]
暂停编辑(用fg命令可以返回vi编辑器):!cc%
编译正在编辑的C程序:!javac %
编译正在编辑的Java程序
其它
- 在文件中要修改部分文本的缩进:在命令模式下,按v去选择多行,再按shift+>(<)来改变缩进。
- 也可以使用3再按shift+>(<)来改变缩进(3倍)
插件安装
- 普通插件自己将
*.vim
复制到~/.vim/plugin中即可 *.vmb
的插件:则首先需要使用vim将插件打开,然后使用命令:so %
进行安装*.vba
的插件:首先使用vim打开插件,然后使用UseVimBall ~/.vim
进行安装
Vim的折叠
- 设置折叠方式: 可用选项 ‘foldmethod‘ 来设定折叠方式:set fdm=*
- 6 种方法来选定折叠:
- manual 手工定义折叠
- indent 更多的缩进表示更高级别的折叠
- expr 用表达式来定义折叠
- syntax 用语法高亮来定义折叠
- diff 对没有更改的文本进行折叠
- marker 对文中的标志折叠
注意,每一种折叠方式不兼容,如不能即用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。
使用时,用:set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。
- 折叠命令
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:
如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
zc 折叠
zC 对所在范围内所有嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内所有嵌套的折叠点展开
[z 到当前打开的折叠的开始处。
]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。