vim

本文最后更新于:2023年12月5日 晚上

vim 有三种模式:

- 命令模式 或 普通模式
- 插入模式 或 编辑模式
- 扩展命令模式 或 命令行模式 或 末行模式

命令模式

光标跳转

字符间跳转
j      # 下
k      # 上
h      # 左
l      # 右
单词间跳转
w      # 定位下一个单词
当前页跳转
H      # 定位页首
M      # 定位中间行
L      # 定位页末
zt     # 滚动屏幕, 使当前行置顶 top
zz     # 滚动屏幕, 使当前行置中
zb     # 滚动屏幕, 使当前行置底 bottom
行首行尾跳转
^      # 定位行首第一个非空字符
0      # 定位行尾
$      # 定位行首
行间移动
gg     # 定位文首
G      # 定位文末
nG     # 定位指定行行首, 例如定位第5行: `5G`
句间和段落间移动
)      # 下一句
(      # 上一句
}      # 下一段
{      # 上一段
翻屏操作
ctrl+f     # 向后翻一屏
ctrl+d     # 向后翻半屏
ctrl+b     # 向前翻一屏
ctrl+u     # 向前翻半屏

字符编辑

x     # 剪切光标处字符
p     # 黏贴
~     # 转换大小写, 然后光标向后移一位
J     # 删除当前行前后的换行符

替换 replace

r    # 替换光标所在处的一个字符, 按下r,然后再按替换后的字符
R    # 切换成REPLACE模式, ESC回到命令模式, 按下r, 然后再输入替换后的内容

删除 delete

d      # 删除, 可结合光标跳转, 实现范围删除
d$     # 删除到行尾
d0     # 删除到行首
d^     # 删除到非空行首
dd     # 删除当前行
#dd    # 删除多行, 从当前行开始, 删除#行
D      # 删除到行尾, 等同于d$

复制 yank

y  # 复制, 行为相似于d命令
Y  # 复制整行

粘贴 paste

p  # 整行, 则粘贴到下一行, 否则粘贴到光标后
P  # 整行, 则粘贴到上一行, 否则粘贴到光标后

命令模式 切换到 插入模式

以下快捷键, 进入插入模式

i    # 不动
I    # 定位行首
a    # 向后移一位
A    # 定位行尾
o    # 定位下一行行首, 并开辟新行
O    # 定位上一行行首, 并开辟新行

插入模式

从光标前输入数据

末行模式

:wq         # 存盘并退出
:q!         # 不存盘强制退出
:r file     # 将file中的内容写入到当前文件, 例如\`:r a.log\`就把a.log中的内容写入到当前文件
:w file     # 将当前文件内容写入file文件, 如果file已存在, 需要\`:w! file\`强制覆盖文件
:!command   # 不退出文件,执行命令
:r!command  # 将执行命令的输出写入到当前文件

地址定界:

n   # 第几行, 例如2表示第2行
n,n  # 第#行到到第#行, 例如 2,5 表示2到5行
n,+n  # 第#行加#行, 例如 2,+3 表示2到5行
.   # 当前行
$   # 最后一行, .,$-1 表示当前行到倒数第二行
%   # 全文, 相当于1、$

/pattern/     # 从当前行开始,直到第一次匹配到的行
/pattern1/,/pattern2/  # 从pattern1第一次匹配到行, 到pattern2第一次匹配到的行
n,/pattern/    # 从指定行开始, 到第一次pattern匹配到行
/pattern/,$    # 从pattern第一次匹配到的行, 到最后一行

地址定界后跟一个编辑命令:

d     # 删除
y     # 复制
w file    # 将范围内的行另存到file文件中
r file    # 在指定位置插入file文件中的所有内容

查找并替换:

s/要查找的内容/替换为的内容/修饰符  # 当前行查找替换
%s/要查找的内容/替换为的内容/修饰符 # 全文查找替换

要查找的内容可使用正则
替换为的内容不能使用正则,但可以使用\1, \2, ...等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容
修饰符:
 i  忽略大小写
 g  全局替换
 gc  全局替换, 每次替换前询问
u    # 撤销, 相当于windows中的ctrl+z
#u    # 撤销多步
U    # 撤销此行的所有操作
ctrl+r   # 取消撤销, 相当于windows中的ctrl+y

高级用法

示例:粘贴”wang”100 次

100iwang [ESC]
di"      # 光标在” “之间,则删除” “之间的内容
yi(      # 光标在()之间,则复制()之间的内容
vi[      # 光标在[]之间,则选中[]之间的内容
dtx      # 删除字符直到遇见光标之后的第一个 x 字符
ytx      # 复制字符直到遇见光标之后的第一个 x 字符

定制 vim 的工作特性

配置文件:

/etc/vimrc      # 全局
~/.vimrc   # 个人
set nu
set nocompatible
set showmode
set showcmd
set encoding=utf-8
set t_Co=256

" 缩进
set autoindent
set tabstop=4

" 外观
set wrap
set linebreak
set wrapmargin=2
set showmatch
set hlsearch
set ignorecase
set smartcase

" 编辑
set autoread
set wildmenu

" 插件
autocmd FileType php set omnifunc=phpcomplete#CompletePHP

set tags=/data/wwwroot/php-7.1.32/tags

可视化模式

进入可视化模式:

v           # 面向字符
V           # 面向整行
ctrl + v    # 面向块(列)

选中的文字可以被删除、复制、变更、过滤、搜索、替换等

示例:在文件每一行行首插入 # 然后再删除

gg
ctrl + v
G
I
输入#
ESC退出 插入#成功
ctrl + v
d 删除成功
ESC退出

vim 总结




vim
http://blog.lujinkai.cn/运维/基础/文本处理/vim/
作者
像方便面一样的男子
发布于
2020年12月11日
更新于
2023年12月5日
许可协议