vim使用技巧

vim使用技巧

移动光标


  • 单行移动
w 移动光标到下一个单词开头
W 移动光标到下一个单词开头,长跳.比如/etc/letsencryt 被认为是一个单词
e 移动光标到下一个单词结尾
E 移动光标到下一个单词结尾,长跳
b 移动光标到上一个单词
B 移动光标到上一个单词,长跳
nw n代表数字,比如移动到下5个单词的头部,5w
ne n代表数字,比如移动到下5个单词的尾部,5e
  • 行首行尾移动
0 数字0,表示移动到本行最开头,不管有没有缩进都跳到最开头,作用等用于Home键
^ 移动光标到本行最开头的字符处
$ 移动到本行结尾处.作用等同于End键
  • 屏幕中移动
H 移动光标到屏幕的首行.注意是当前屏幕窗口,而不是整个文件.
M 移动光标到屏幕的中间一行.
L 移动光标到屏幕的尾行.
  • 文件范围移动
gg 移动光标到文件首行.这个是移动到整个文件的第一行
G 移动光标到文件的最后一行. 这个是移动到整个文件的最后一行
:n 跳到第n行.比如跳到第5行,可以输入:5
nG或ngg 也是跳到n行,比如跳到第10行,输入10G,或者10gg
:n n代表数字,比如移动到100行,输入:100
  • 翻页
ctrl+f 向下翻页,等同于page down
ctrl+b 向上翻页,等同于page up
ctrl+d 向下翻半页
ctrl+u 向上翻半页
  • 特殊移动技巧
{ 跳到上一个空行
} 跳到下一个空行
* 将光标停留在某个单词上,按下*键,会搜索该单词,并跳到下一个这个单词处
# 将光标停留在某个单词上,按下#键,会搜索该单词,并跳到上一个这个单词处
‘’ 两个单引号,移动光标到上一个标记处.比如跳转到他处后,输入此命令回到上一次光标停留的位置
‘. 一个单引号一个点,移动光标到上一次的修改行
`. 一个倒引号一个点.移动光标到上一次的修改点

删除复制—结合光标

在vim中,y表示拷贝,d表示删除,p表示粘贴.其中拷贝和删除和光标移动命令可以结合使用

  • 删除
dw w是移动到下一个单词开头.dw表示删除从当前光标到光标所在单词结尾的内容
dW 同上,不过是长删除, /etc/letsencrypt被认为是一个单词
daw 删除光标所在的单词,无论光标是停留在哪里.例如/etc/letsencrypt/.如果光标停留在letsencrypt中的t字母上,则会删除letsencrypt这个单词.如果是dw则只删除tsencrypt,保留le
daW 同上,长删除
d0 数字0,删除从当前光标到光标所在行首的内容
d$或dD 删除从当前光标到光标所在行尾的内容
  • 复制
yw 同理,复制从光标所在字母到单词结尾的内容
yW 同上,长复制
yaw/yaW 同理,复制单词,无论光标停留在单词的哪个字母
y0 拷贝从当前光标到光标所在行首的内容,如果该行缩进,那么连行首的空格也一起复制
y^ 拷贝从当前光标到光标所在行首的内容,如果该行缩进,不包括行首空格,
y$ 拷贝从当前光标到光标所在行尾的内容
  • 整行复制删除
yy 复制光标所在整行内容
dd 删除光标所在整行内容
D 删除从当前光标到光标所在行尾的内容
J 表示光标所在行和下一行合并
:.,$d 删除当前行到文件末尾,
dG 删除当前行到文件末尾,
:/str1/,/str2/d 删除从字符串str1到str2的所有行

删除复制—结合数字

5yy或者y5y 拷贝光标以下5行,包含光标所在行本身
:n1,n2y n表示数字,例如:12,24y表示拷贝第12行到第24行的内容.
:n,y n表示数字,例如:12,y表示拷贝第12行到光标所在行之间的内容.
:,ny n表示数字,例如:,24y表示拷贝光标所在行到第24行之间的内容.
5dd或者d5d 删除光标以下5行,包含光标所在行本身
:n1,n2d n表示数字,例如:12,24d表示删除第12行到第24行的内容.
:n,d n表示数字,例如:12,d表示删除第12行到光标所在行之间的内容.
:,nd n表示数字,例如:,24d表示删除光标所在行到第24行之间的内容.
:nd n表示数字,例如:3d表示删除3行.注意和上个命令区分

查找

/xxx或者?xxx 在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找.支持正则表达式.输入 n 查找下一个匹配处, 输入 N 反方向查找.注意查找字符串默认区分大小写
*或者# 光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的下(上)一个单词,同样,输入n查找下一个匹配,输入N反方向查找
g*或者g# 和上条相似,但是这个命令不完全匹配光标所在处的单词,而是匹配包含该单词的所有字符串
gd 查找与光标所在单词相匹配的单词, 并将光标停留在文档的非注释段中第一次出现这个单词的地方. 用于查找局部变量等
% 查找与光标所在处相匹配的反括号, 包括 () [] { }

替换

一般结合s和g命令进行替换.一般格式为:

:%s/匹配模式/替换后的字符串/g.其中模式可以是正则表达式,以下是几个例子

:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb.注意是光标所在行,不是全文件
:%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb.文件全局生效
:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/ 将从12行到23行的行首加入 # 字符
:s/^/#/g 全局所有行首插入#字符

还有一个方法可以批量在行首插入字符:

1.ctrl+v批量选中要插入的行

2.按大写字母I,输入要插入的字符

3.连续按两次ESC键

:%s/\s+$// 将所有行尾多余的空格删除.等同于”:%s= *$==”
:g/^\s*$/d 将所有空行删除
:g/^\/\//d 将所有//开头的行整行删除.(不仅仅是删除//)

s配合g一般用来做替换,g单独使用一般用来删除匹配的行


编辑

cc 删除当前行并进入编辑模式
cw 删除当前字,并进入编辑模式
c$ 擦除从当前位置至行末的内容,并进入编辑模式
S 删除光标所在行并进入编辑模式
s 删除当前字符并进入编辑模式
u 撤销
ctrl+r 撤销上一个撤销.
~ 将光标当前选中的字符切换大小写
>> 当前行右移一个tab
<< 当前行左移一个 tab
5>> 当前光标后5 行向右移动一个 tab.
:12,24> 将12行到14行的数据都向右移动一个 tab
:12,24>> 将12行到14行的数据都向右移动两个 tab
:w filename 将当前文件所有内容写入新文件
:5w filenmame 将当前文件第5行内容写入新文件
:1,10w filename 将当前文件第1到第10行内容写入新文件
:f filename 将当前文件重命名为新文件

多文件编辑

vim file1 file2 … 同时打开多个文件进行编辑
:n\:N (等同于:next\:prev) 进入下一个文件(上一个文件)编辑.这个命令要求先保存当前编辑文件
:n!\:N! 不保存当前编辑文件,并且切换到下(上)文件编辑.
:wn\wN 保存当前编辑文件,并且切换到下(上)文件编辑
ctrl+^ 在最近打开的2个文件之间快速切换
:e 文件名 指定对某个文件进行编辑
:sp [file] 把当前文件或者指定文件水平分隔
:vsp [file] 把当前文件或者指定文件垂直分隔
:q\:close 关闭当前文件窗口
:only 只保留当前文件窗口,关闭其他所有窗口
:[q\ wq]all 对所有窗口执行q或者wq操作
:[q\ wq]all! 对所有窗口执行q!或者wq!操作
:vertical all 打开所有窗口,垂直打开
ctrl+w w vim分隔了多个窗口后,光标循环定位到各个窗口中
ctrl+w h/i vim分隔了多个窗口后,光标跳转到左边(右边)的窗口
ctrl+w j/k vim分隔了多个窗口后,光标跳转到上边(下边)的窗口
ctrl+W = 让所有vim分隔后的多个窗口高度保持一样
ctrl+W +/- 增加/减少vim当前窗口高度

执行外部shell命令

:! command 这是比较常用的执行命令方式,比如 :!ls 显示当前目录下的文件.执行完命令后按回车返回vim编辑窗口
:r! command 比如:r!ls.和上面的命令类似,但是执行完的结果会保存在vim的缓存中,一直显示在当前vim编辑窗口

常用功能选项

在启动的时候vim会读取 /etc/vimrc 和 ~/.vimrc ( 全局设置的vimrc 和用户设置).下面这些常见的功能选项可以直接定义在vimrc文件里,也可以在vim编辑窗口中输入: set xxx执行.

常见的功能选项有:

:set nu/:set nonu 显示/取消行号.nu是number的缩写
:set ic/set noic 显示/忽略大小写.ic是ignorecace的缩写
:set ai/set noai 自动/不自动缩进.ai是aotuindent缩写
:set hlsearch/:set nohlsearch 显示/不显示高亮.
:syntax on / :syntax off 语法高亮/关闭语法高亮
set tabstop=4 设置tab键为4个空格
set ruler 在右下角显示光标位置的状态行
set incsearch 查询的时候非常方便.比如搜索book单词.输入/bo时,就已经自动开始查找.
set noswapfile 不要交换文件

粘贴避免缩进

1.在粘贴之前,vim窗口中输入:set paste #vim就不会自动缩进,而是纯拷贝粘贴
2.在粘贴之后,vim窗口中输入:set nopaste #关闭paste

还有一种方法是,即使粘贴后代码格式变的非常慢,只要执行gg=G就能自动编排格式.

本文标题:vim使用技巧

文章作者:Jesse

发布时间:2018年11月21日 - 12:11

最后更新:2018年12月01日 - 22:12

原始链接:https://jesse.top/2018/11/21/Linux-Basic/文本处理/vim使用技巧/

许可协议: 禁止商业用途 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!