1.常用vim操作
:w :q :wq :q!
:set nu (:set number)
显示行号
:set nonu (:set nonumber)
取消显示行号
:w [文件名]
将编辑后的内容保存到另一个文件中(另存为,如果文件不存在则创建文件并存入)
:2,5w [文件名]
将第2到5行的内容保存到另一个文件中(指定行另存为)
:r [文件名]
输入另一个文件的内容,到光标的下一行
:1,$d
从第一行到最后一行,全部删除
:1,$y
从第一行到最后一行,全部复制(yanked)
:%s/old_string/new_string/g
将某个字符串全部替换为另一个字符串
1.old_string
是您要替换的原始字符串。
2.new_string
是您要替换为的新字符串。
3.g
表示全局替换,如果不包含 g
,则只替换每行的第一个匹配字符串。
:727,857s/SQL/API/g
将727到857之间的SQL替换为API
:1,10s/\v(.*)/\U\1/g
1. 1,10:表示行范围,指定了我们要替换的行的范围为1到10行。
2. s:表示进行替换操作。
3. \v:启用“魔术模式”或者“非规范模式”,这意味着我们可以使用更简洁和直观的正则表达式语法来匹配文本。
4. (.*):这是正则表达式的一部分,表示匹配任意字符(除了换行符)零次或多次,并将其捕获到分组1中。
5. \U:将接下来的字符全部转换为大写。
6. \1:引用第一个捕获的分组,即(.*)中匹配到的内容。
7. g:表示全局替换,在每一行中找到所有匹配项并进行替换。
这个命令会在1到10行的每一行中找到任意字符,然后将其全部转换为大写。
:let i=130 | 858,888g/$/s/$/\=i/ | let i=i+1
1. let i=130:这个命令使用let关键字来定义一个变量i并将其初始化为130,
这个变量用于存储自增的数字。
2. |: 这个竖线符号用于分隔多个命令,使它们可以在同一行上执行。
3. 858,888g/$/s/$/\=i/,这是一个替换命令,它的格式为:[range]g/pattern/s/pattern/replacement/
其中:
858,888g:这个范围命令指定了从858到888行。
/$/:这个模式匹配每一行的行尾($表示行尾)。
s/$/\=i/:这个替换命令将行尾的行尾符号替换为变量i的值,\=表示后面的内容作为VimL表达式求值。i将被插入到行末。
4. let i=i+1:这个命令将变量i的值加1,以便下一个行尾插入操作时使用。
这个命令将会在从第858行到第888行的每一行的行尾插入从130开始的自增数字。每次执行命令时,自增数字将会递增。
:let i=130 | 858,888g/$/s/$/\=' '.i/ | let i=i+1
在 Vim 中,点 . 是用来进行字符串拼接的操作符,它将左右两个字符串连接在一起,形成一个新的字符串。此命令即在数字i之前加入四个空格。
yy
复制一行
y+Shift+g(即G)
从光标当前行,复制到最后一行(在第一行的话,等价于:1,$y)
gg
到头部
Shift+g(即G)
到尾部
dd
删除光标行(准确来说是剪切,用p可粘贴出这行)
a
当前光标后面插入
i
当前光标位置插入
Shift+5(即%)
到另一个匹配的括号处
Shift+1
光标到行尾
0
光标到行首、
num+方向键
光标向方向移动num格
note:
vim中的「数字键」代表重复次数,可以配合其他指令简化操作,比如:
-
10↓或10j可一次向下移动10行。
-
2p可以一次粘贴2行
-
2dd可以一次剪切2行
以此类推…
x
删除后一个字符
Shift+x(即X)
删除前一个字符
u
撤回
Ctrl+r
取消撤回
.(小数点)
重复刚才的操作
p
粘贴到下一行
Shift+p(即P)
粘贴到上一行
/word Shift+8(即*) Shift+3(即#)
搜索word,*是去搜到的下一个,#是去搜到的下一个;n是下一个,Shift+n是上一个。
2.Ctrl+v可视块模式
在Vim中,Ctrl+v是一个常用的快捷键组合,用于进入可视块模式,可视块模式可以用于选择和编辑文本块(直接v则选中行,有的命令直接v的时候不可用)。
以下是在Vim中使用Ctrl+v的一些常见用法:
1.选择矩形块:按下Ctrl+v,然后使用方向键移动光标,可选择一个矩形文本块。
2.插入矩形文本:Shift+i 进入插入模式。
3.对齐文本:Shift+: 进入命令行模式,在命令行上输入对齐命令(例如left、right、center等)并按下回车键,可以对所选的文本进行对齐操作。
4.块注释:Shift+i 进入插入模式,输入注释符(例如#或//等),按下Esc键,可以在所选的每一行前添加注释符,实现块注释。
5.复制或剪切矩形块:c 修改所选内容,y 复制所选内容,d 剪切所选内容,p 将所选内容粘贴到光标所在位置。
3.分割窗口
:sp(:split)
在vim中,:sp命令用于水平分割当前窗口并打开一个新的空白文件,在分割窗口之后,你可以在新窗口中编辑文件。这样做的好处就是在编辑的时候,可以在新建窗口中参考其他文件内容或本文件别的内容。
:vsp
垂直分割窗口
:vsp GetBindInfotest.c 即在分割出的窗口打开此文件
一些在分割窗口中操作的常用命令和快捷键包括:
1.Ctrl + w + w 切换焦点到下一个窗口
2.Ctrl + w + 方向键 在窗口之间切换
3.Ctrl + w + = 使所有窗口大小相等
4.Ctrl + w + _ 最大化当前窗口的高度
5.Ctrl + w + | 最大化当前窗口的宽度6.Ctrl + w + v 垂直分割窗口并打开文件
7.Ctrl + w + s
8.Ctrl + w + r 交换窗口位置
要在新窗口中打开文件,可以使用命令 :e <文件路径> 或者 :sp <文件路径>。
当你完成在分割窗口中的操作后,可以使用快捷键 Ctrl + w + c关闭当前窗口;Ctrl + w + q也可以关闭窗口,当只有一个窗口后,将会退出vim。
4.find专题
1.目录中某个字符串在所有文件中替换
find directory -type f -exec sed -i 's/old_string/new_string/g' {} +
此命令的步骤如下:
find directory -type f:
查找目录 directory 下的所有文件。
-exec sed -i 's/old_string/new_string/g' {} +:对选定的文件执行 sed 命令,使用正则表达式替换目标字符串为新字符串。
-i:直接修改文件内容,而不是在标准输出中显示结果。
's/old_string/new_string/g':指定替换的正则表达式,将 old_string 替换为 new_string。
{} +:将选定的文件作为参数传递给 sed 命令。
2.统计目录中代码的总行数
find /path/to/directory -type f -exec cat {} + | wc -l
此命令的步骤如下:
find /path/to/directory -type f:
查找目录 /path/to/directory 下的所有文件。
-type f:只匹配普通文件,排除目录。
-exec cat {} +:对于每个找到的文件,使用 cat 命令将其内容输出到标准输出。
{}:表示找到的文件。
+:
表示一次性处理所有文件,而不是每个文件都执行一次命令。
|:管道操作符,将前一个命令的输出作为后一个命令的输入。
wc -l:统计输入中的行数。
( | wc -l:将 cat 命令输出的内容传递给 wc -l 命令进行行数统计)
由于使用 cat 命令将所有文件的内容输出,这种方法适用于统计任何类型的文件,而不仅限于代码文件。如果只想显示代码文件的行数,见下文。
3.统计一个目录中剔除可执行程序和库文件的总行数
使用find命令结合grep和wc命令来实现。假设目录名称为directory:
find directory -type f ! -executable ! -name '*.so*' -exec grep -v '^$' {} + | wc -l
此命令的步骤如下:
find directory -type f:
查找目录directory下的所有文件。
! -executable:排除可执行程序,只选择非可执行文件。
! -name '*.so*':排除库文件,只选择非库文件。
-exec grep -v '^$' {} +:对选定的文件执行grep命令,过滤掉空行。
| wc -l:将过滤后的结果通过管道传递给wc命令,统计行数。
5.规整格式
1.快速删除^M
1. :%s/\r//g
将本文件^M删除,如果出现^V则用:%s/^V//g,%s/\r//gc形式则是挨个确认替换。
2. :set ff=unix :w
把格式换成unix,^M将会全部消失,保存即可。
3.整个目录下全局删除^M
find /home/czy/gci_esqlc/gtest/src -type f -exec sed -i 's/\r//g' {} +
2.删除只有空格的行的空格(或制表符)
1. :%s/^\s*$//
^\s*$
是正则表达式的模式:
^
表示行的开头\s*
表示匹配零个或多个空白字符(包括空格和制表符)$
表示行的末尾- 替换部分为空,即删除匹配到的内容。
2.整个目录下全局操作
find /home/czy/gci_esqlc/gtest/src -type f -exec sed -i 's/^\s*$//g' {} +