VIM常用功能
目录
vim的查找功能
在vim下要查找字符串:
一,匹配:
片段匹配
1,从上往下查找,比如“string” : /string
2,从下往上查找,比如“string” : ?string
精确匹配
如果你输入 "/the",你也可能找到 "there"。要找到以 "the" 结尾的单词,可以用:
/the\> "\>" 是一个特殊的记号,表示只匹配单词末尾。类似地,"\<" 只匹配单词的开头。
这样,要匹配一个完整的单词 "the",只需:/\<the\>
二,正则表达式
1,. :通配1个字符 ,如 匹配 server, 可以用 /se...r
2,* :通配多个字符,如 匹配 privilege,可以用 p*ge
三,快速查找
1, Shift + * :让光标停留在想要查找的单词的任意一个字母上面, 然后输入 Shift + * ,即可快速选中该单词,并且通过 n 或 N 进行上一个或下一个的匹配。
2,yw :让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且通过 n 或 N 进行上一个或下一个的匹配。
3,匹配多个关键字
/关键字1\|关键字2\|关键字3...
即开头使用斜杠/表示后面是要匹配的内容,
如果想同时使用多个匹配则使用\|将多个关键字隔开
忽略大小写查找字符串
方法一:
查找时使用\c参数。进入底行模式,输入命令“/string\c ” 或 “/\cstring”,将会忽略大小写查找string字符串。
注意:\c与字符串之间不要有空格,因为该空格也会被认为是查询的字符串
方法二:
通过设置vim配置来忽略大小写查找。
set ignorecase 或 set ic 忽略大小写查找
set noignorecase 或set noic 严格大小写查找
临时的话,在底行模式,输入命令 set ignorecase 或 set ic,在没关闭该文件前提下,字符串的查找都将不区分大小写。
四、跳到下(上)一个搜索结果
搜索高亮后,
跳到下一个:小写n
上一个:大写N
跳转移动
gg:将光标移动到文档开头G:将光标移动到文档末尾
1.跳转到文件头
输入冒号(:),打开命令输入框
输入命令1,是“一”的阿拉伯数字,不是小写的L
2.跳转到文件尾
输入冒号(:),打开命令输入框
输入命令:$
End键:将光标移动到行开头
Home键:将光标移动到行末尾
vim 文本行逆序化
要求
示例:将文本
1234
123
12
1
转换成
1
12
123
1234
:g/.*/mo0
或者
:g/^/mo0
( 注意大文件会执行很长时间)
vim跳转到指定行
ngg/nG (跳转到文件第n行,无需回车)
:n (跳转到文件第n行,需要回车)
vim +n filename (在打开文件后,跳转到文件的第n行)
gg : 跳转到文件头
Shift+g : 跳转到文件末尾
行数+gg : 跳转到指定行,例跳转到123行:123gg
vim删除
- vim 快速删除一个英文单词
ctrl-w删除最后一个单词,
ctrl-u删除你所在的整行.
-
vim -r file: 恢复上次异常退出的文件;
-
vim +num file: 从第num行开始;
显示不可见字符
不可见特殊字符,例如\r显示为^M。通过:help digraph-table可看到所有Vim中可输入的特殊字符
显示当前文件的二进制编码可输入: %!xxd,该命令会替换文件内容!恢复:: %!xdd -r 。
Windows风格换行(\r\n)在Vim中会在每行结尾显示^M
将DOS风格换行(\r\n)的文件转为Unix风格换行(\n):
:set fileformat=unix
:w
” 显示隐藏字符
:set list
” 不显示隐藏字符
:set nolist
切换显示或隐藏不可见字符:
:set list!
:set invlist即可以将不可见的字符显示出来,例如,会以^I表示一个tab符,$表示一个回车符等。
cat -A file可以把文件中的所有可见的和不可见的字符都显示出来
Vim 将 tab 自动转换成空格
(摘自:Vim 将 tab 自动转换成空格https://blog.51cto.com/u_16013781/6159237)
举例:将第一行到文件尾的 tab 转换成 space,每个 tab 用 4 个 space 替代。
:set expandtab
:%ret! 4
如果没有给定 4,则用当前的 tab 宽度设定替换为 space。
其它相关命令:
:set tabstop=4 设定tab宽度为4个字符
:set shiftwidth=4 设定自动缩进为4个字符
:set expandtab 用space替代tab的输入
:set noexpandtab 不用space替代tab的输入
这种设置只是针对当前的文件。如果想让设置对所有的文件都有效,可以修改 Vim 的配置文件 .vimrc ,将设置命令添加到文件中。
函数跳转(需要插件ctags)
光标移到想要跳转的函数或变量上 : " CTRL + ] "
回到跳转之前的位置:“ CTRL + t ”
按了多少次“ CTRL + ] ”,就可以按多少次“ CTRL + T ”原路返回
[[ 向前跳到上一个函数头
]] 向后跳到下一个函数头
tag+函数名
来跳转到对应的函数
:tag 函数名
安装ctags:
yum install ctags
sudo apt-get install exuberant-ctags
在源文件目录树执行如下命令:
ctags -R .
即可目录下生成一个tags文件, 这个文件就是所有函数和变量的索引列表
原文链接:https://blog.csdn.net/shenjin_s/article/details/81161372
光标移动 //vim9.0部分适用
-
w: 前移一个单词,光标停在下一个单词开头;
-
W: 移动下一个单词开头,但忽略一些标点;
-
e: 前移一个单词,光标停在下一个单词末尾;
-
E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
-
b: 后移一个单词,光标停在上一个单词开头;
-
B: 移动到上一个单词开头,忽略一些标点;
文档操作
-
:e -- 重新加载当前文档。
-
:e! -- 重新加载当前文档,并丢弃已做的改动。
-
:w -- 保存修改。
-
:wq -- 保存并退出。
翻页
-
n%: 到文件n%的位置。
-
zz: 将当前行移动到屏幕中央。
-
zt: 将当前行移动到屏幕顶端。
-
zb: 将当前行移动到屏幕底端。
复制 / 粘贴
-
p: 在光标之后粘贴。
-
P: 在光标之前粘贴。
-
d$ or D: 删除(剪切)当前位置到行尾的内容。
-
d[n]w: 删除(剪切)1(n)个单词
-
d0: 删除(剪切)当前位置到行首的内容
-
[n] dd: 删除(剪切)1(n)行。
查找 / 替换
-
/something: 在后面的文本中查找something。
-
?something: 在前面的文本中查找something。
-
/pattern/+number: 将光标停在包含pattern的行后面第number行上。
-
/pattern/-number: 将光标停在包含pattern的行前面第number行上。
-
n: 向后查找下一个。
-
N: 向前查找下一个。
-
-
:s/old/new - 用new替换当前行第一个old。
-
:s/old/new/g - 用new替换当前行所有的old。
-
-
\d: 表示十进制数(我猜的)
-
\s: 表示空格
-
\S: 非空字符
-
\a: 英文字母
-
\|: 表示 或
-
\.: 表示.
-
{m,n}: 表示m到n个字符。这要和 \s与\a等连用,如 \a\{m,n} 表示m 到n个英文字母。
-
{m,}: 表示m到无限多个字符。
-
**: 当前目录下的所有子目录。
排版
-
<< 向左缩进一个shiftwidth
-
>> 向右缩进一个shiftwidth
-
:ce(nter) 本行文字居中
-
:le(ft) 本行文字靠左
-
:ri(ght) 本行文字靠右
编辑多个文件
-
使用:next(:n)编辑下一个文件。
-
使用:previous或:N编辑上一个文件。
-
使用:wnext,保存当前文件,并编辑下一个文件。
-
使用:wprevious,保存当前文件,并编辑上一个文件。
-
使用:args 显示文件列表。
-
vi -o filenames 在水平分割的多个窗口中编辑多个文件。
-
vi -O filenames 在垂直分割的多个窗口中编辑多个文件。
拆分成多窗口
:split 新建一个窗口,将当前窗口分割成两半,他们显示的是相同缓冲区的内容(同一个文件)。这样就可以在两个窗口中浏览相同的文件了。
:vsplit 创建全新的垂直分割的窗口,同样是显示和当前窗口同一个文件内容。效果如下:
关闭与离开窗口
有4种关闭窗口的方式,分别是:离开(quit)、关闭(close)、隐藏(hide)、关闭其他窗口
^代表Ctrl键
^Wq,离开当前窗口
^Wc,关闭当前的窗口
^Wo,关闭当前窗口以外的所有窗口
原文链接:https://blog.csdn.net/pc153262603/article/details/106356307
切换窗口
-
ctrl+w ctrl+w: 切换到下一个窗口。或者是ctrl+w w。
-
ctrl+w p: 切换到前一个窗口。
快速编辑
-
~: 反转光标所在字符的大小写。
-
r: 替换光标处的字符,同样支持汉字。
-
R: 进入替换模式,按esc回到正常模式。
-
-
[n] u: 取消一(n)个改动。
-
:undo 5 -- 撤销5个改变。
-
:undolist -- 你的撤销历史。
-
ctrl + r: 重做最后的改动。
-
U: 取消当前行中所有的改动。
-
:earlier 4m -- 回到4分钟前
-
:later 55s -- 前进55秒
查看文件编码
-
:set fenc或:set fileencoding,查看当前文件的编码。
-
:set ff,显示当前文件的格式。
-
:pwd 显示vim的工作目录。
-
:ver 显示版本信息。
在线帮助
-
:h(elp)或F1 打开总的帮助。
-
:help user-manual 打开用户手册。命令帮助的格式为:第一行指明怎么使用那个命令; 然后是缩进的一段解释这个命令的作用,然后是进一步的信息。
-
:helptags somepath 为somepath中的文档生成索引。
-
:helpgrep 可以搜索整个帮助文档,匹配的列表显示在quickfix窗口中。
-
Ctrl+] 跳转到tag主题,
-
Ctrl+t
-
1.复制剪切粘贴撤销
-
复制:
-
复制一行则:yy
-
复制三行则:3yy,即从当前光标+下两行。
-
复制当前光标所在的位置到行尾:y$
-
复制当前光标所在的位置到行首:y^
-
剪切:
-
剪切一行:dd
-
前切三行:3dd,即从当前行+下两行被剪切了。
-
剪切当前行光标所在的位置到行尾:d$
-
剪切当前行光标所在的位置到行首:d^
-
粘贴:
-
用v选中文本之后可以按y进行复制,如果按d就表示剪切,之后按p进行粘贴。
-
撤销与恢复:
-
'u' : 撤销上一个编辑操作
-
'ctrl + r' : 恢复,即回退前一个命令
-
'U' : 行撤销,撤销所有在前一个编辑行上的操作
-
2.屏幕翻页
-
Ctrl+u: 向上翻半屏
-
Ctrl+f: 向上翻一屏
-
Ctrl+d: 向下翻半屏
-
Ctrl+b: 向下翻一屏
-
3.移动光标指令 移动光标普遍使用的是方向键,考虑兼容问题,vi定义太多的方向指令,下面只是一小小部分(常用的几个): space: 光标右移一个字符 Backspace: 光标左移一个字符 Enter: 光标下移一行 nG: 光标移至第n行首 n+: 光标下移n行 n-: 光标上移n行 n:光标移至第n行尾0光标移至当前 行首
-
: 光标移至当前行尾
-
4.插入删除指令
-
常用插入、删除指令如下:
-
i:在当前光标前插入,光标后文本向后移
-
a:从当前光标后插入,光标后文本后移
-
I:在光标所在行首插入(第一个非空白字符前)
-
A:从光标所在行末插入
-
o: 在光标所在行下面新增一行(并进入输入模式)
-
O: 在光标所在行上方新增一行(并进入输入模式)
-
x: 删除光标所在字符,等同于[Delete]功能键
-
X: 删除光标前字符,相当与[Backspace]
-
dd: 删除光标所在的行
-
r: 修改光标所在字符
-
R: 替换当前字符及其后的字符,直到按 [ESC]
-
s: 从当前光标位置处开始,以输入的文本替代指定数目的字符
-
S: 删除指定数目的行,并以所输入文本代替之
-
do: 删至行首
-
d$: 删至行尾
-
-
5.退出
-
退出输入模式,先按一下[ESC]键(有时要多按两下),然后执行:
-
:w!
-
:w ——保存当前文件
-
:wq —— 存盘退出(与指令 :x 功能相同)
-
:q —— 直接退出,如已修改会提示是否保存
-
:q! ——不保存直接退出