admin 管理员组文章数量: 887021
VIM的优势
如果做Linux C/C++开发,经常ssh到Linux服务器编辑各种文件,那么熟练使用VIM绝对可以提高工作效率。
VIM的高效体现在多模式,可以很方便快速的对文件进行各种编辑修改,而这恰恰是在软件开发中经常遇到的场景。VIM流行这么多年,很多操作都是经过多年沉淀下来的高效操作,熟练的VIM操作可以让编辑与思维尽可能同步,快速的反复修改,把代码写成想要的样子。并且,在Linux上很多的操作,默认集成VIM键位的,比如man查询一个命令,git提交注释时等。
之前还不太习惯用VIM时,在Linux服务器上开启sambda服务,把一个目录映射到windows上,然后在windows上修改对应的文件代码,修改完毕后再去编译执行。这样操作,效率都是偏低的,尤其是快速修改脚本文件调试时,不能马上就地修改快速运行。后来下定决心,好好练习了一下VIM,感觉收获很多。
VIM的练习
想熟练运用VIM,前期需要一定的刻意练习和思考。比如: 如何快速让光标跳转到指定位置;如何用最少的最快捷的按键完成自己想做的操作等。总结提炼一下自己平时所碰到的常见的编辑场景,思考查询最有的操作办法,刻意练习直到形成肌肉记忆。平时也可以多搜搜别人使用的VIM的一些技巧,看看高手们如何把VIM运用的出神入化的,博采众家之长。
自己刚开始沉迷于sublime时,也是刻意的练习过一阵子,后面确实体会到了很多的方便之处,多点编辑,实时匹配正则替换,自动格式化等等。深度掌握一种或几种文本编辑器对一名程序员还是蛮有必要的。而VIM的学习相信带来的收益更大,多种IDE都有VIM模式的键位支持,VIM的编辑方式已经渗透了多种开发工具:)
VIM小技巧
总结一下自己平时常用到的操作,熟悉这种模式后,模式和按键组和使用,发挥更大的优势。
# 跳转
H # 移动到屏幕顶端high
M # 移动到屏幕中部middle
L # 移动到屏幕中部low
ctrl + o # 跳转光标的上一次位置
ctrl + i # 跳转光标的下一次位置
gd # 跳转到局部变量定义 go definition
gf # 跳转到文件
% # 跳转到匹配的括号
# C/C++跳转下一个函数
[[ # 用来跳到光标前面的一个函数开始处
]] # 用来跳到光标后面的一个函数开始处
[] # 用来跳到光标前面的一个函数结尾处
][ # 用来跳到光标后面的一个函数结尾处
# 查找
/xx # 查找xx, n向下,N反向
?xx # 查找xx, n向上,N反向
:noh # 取消搜索高亮,no highlight
* # 选中并正向查找光标所在的词
# # 选中并反向查找光标所在的词
:set ignorecase # 搜索忽略大小写,可以tab联想输入
:set noignorecase # 不忽略
/<up/down arrow> # 可以联想出历史输入过的词
:set hlsearch # 打开设置高亮
:jumps # 列出历史跳转列表
fx # 找到本行字母x,再按分号跳到下一处
# 替换
:s/old/new/g # 用new替换行内old
:2,5s/old/new/g # 替换2到5行
:%s/old/new/g # 全文替换
# 自动补全
ctrl + p # 插入模式下联想已经输入过的单词
ctrl + X, ctrl + L # 插入模式下自动补全行, 可以配置组合键盘映射key-map
# 后台
ctrl + z # 挂起当前任务到后台
jobs # 查看后台挂起的任务
fg <n> # 把后台挂起的任务n调度到前台,n可省
# 分屏
:sp <file> # split 水平分屏
:vs <file> # vsplit 垂直分屏
ctrl+ww # 两次w,在分屏间跳转
ctrl+w <hjkl> # 跳转分屏
ctrl+w <+> # 扩大当前分屏
ctrl+w <-> # 减小当前分屏
:only # 取消分屏
# 录制命令
q{a~z} # 进入录制,录制到a寄存器
q # 结束录制
qA # 想寄存器a追加录制的命令
3@a # 执行3遍录制的命令
@@ # 执行上次自己录制的命令
# 多标签
:tabe # tab edit 新标签打开
gt # go tab 在tab中切换
:tabc # tab close 关闭标签页
# 多buffer
:e file # 新buffer中打开file进行edit
:ls # 列出当前缓冲区
:b n # 去第n个缓冲区
:qa # 退出所有窗口, quit all
# 折叠
zf # 创建折行, f表示fold
zR # 打开所有折叠
zc # 折叠当前行current
zo # 打开当前折叠open
zd # 删除折行, d表示delete
zfap # zf一个操作符, ap一个文本块,创建折叠
zfa{ # zf可以和text-object配合,折叠承兑大括号之间的内容,包括大括号所在行
zfi{ # 折叠承兑大括号之间的内容,不包括大括号所在行
:h folding # 折行的帮助
# 缩进
>> # 整行向右缩进
<< # 整行向做缩进
== # 自动缩进
=% # 光标在括号处,缩进整个语句块
# 区间内
vi" # 选中光标所在“引号内的内容,in "
vi' # in '
vi[ # in [
vi( # in (
vi{ # in {
# 类比还有: ci( di(, 修改删除括号内的
# 字符
$ # 行尾, 有点类似正则表达式的通配符
^ # 行首非空白字符
0 # 行首
# 词操作
w # 后一词词首
W # 后一词词首,忽略标点
e # 后一词词尾
E # 后一词词尾,忽略标点
b # 前一词词首
B # 前一次词首,忽略标点
# 句操作
) # 后一句句首
( # 前一句句首
% # 配合括号寻找另一半
# 行操作
G # 最后一行非空白字符
nG # 第n行,类似 :n
gg # 第一行第一个非空白字符
J # join 合并两行
# 段操作
} # 下一段段首, 同样可配合%找配对
{ # 上一段段首
# 页操作
ctrl + f # 下一页 forward
ctrl + b # 上一页 back
ctrl + d # 下半页 down
ctrl + u # 上半页 up
# 复制粘贴删除
v # 进入view mode
V # 行选中模式
d # 删除内容放入缓冲区可供粘贴
D # 删除内容到行尾,删除内容都放入了可供粘贴的缓冲区
y # yank
yy # 复制所在行
y0 # 复制光标到行首
yG # 复制光所在行到文件末尾行
ygg # 复制光标所在行到开头所有行, 类似: c修改 d删除
p # 粘贴到下一处paste
P # 粘贴到上一处
daw # 光标在单词中也可以删除一个单词,delete a word
r # 替换光标所在处的字符一次 (r - replace)
R # 持续替换光标所在处的字符
s # 删除当前字符,并切换为插入模式
S # 删除当前行,改为插入模式
# 修改
a # 光标的下一个位置插入 (append)
A # 行位插入
cc # 修改整行,删除光标所在行,并进入插入模式 (c - change)
cw # 修改单词
C # 修改光标导航到行尾巴 == d$, i == D, i
~ # 反转光标或选中的字母的大小写
# insert模式下
ctrl + w # 删除word
ctrl + u # 重新编辑本行
ctrl + [ # 实现ESC功能
ctrl + d # 左缩进
ctrl + t # 右缩进
# 块编辑,如注释多行代码
ctrl + v # 快选中
I{string} # 大写I插入,只在第一行插入
Esc # 所有之前块选中的都会插入了
# 撤销与恢复
u # 撤销undo
ctrl + r # 反撤销redo
u<n> # 撤销n次
U # 撤销当前行所有修改
# vimdff
vimdiff f1 f1 # 对比两个文件的差异
dp # diff put, 差异部分同步到对端窗口
# 命令
. # 重复上一次操作, 非常有用!
K # 查看光标所在单词的帮助
:read !ls # 读取命令的输出
:read !date # 读取日期
:! <cmd> # 执行命令cmd
:help <cmd> # 查cmd命令的帮助
:shell # 新开一个shell
:set list # 显示空白符,关闭 set nolist
:set paste # 打开粘贴模式,关闭 set nopaste
:%!xxd # 以16进制查看文件内容
:x # 如果文件有更改,则保存后退出, 否则直接退出
:sort r /regex/ # 对行进行正则排序
参考
- https://github/amix/vimrc
- https://github/skywind3000/awesome-cheatsheets/blob/master/editors/vim.txt
- Vim从入门到精通
- 笨方法学Vimscript
- use_vim_as_ide - c/c++
- Linux生产环境上,最常用的一套“vim“技巧
- 真的会有人用 vim 开发大的项目吗?
- 无插件VIM编程技巧
- 给程序员的VIM速查卡
- 简明 VIM 练级攻略
- 世界上最好的编辑器Vim:1700多页数学笔记是如何实时完成的
- Vim 基本配置和常用命令
- Vim 使用小技巧
- Vim 从入门到精通
- 所需即所获:像 IDE 一样使用 vim
- 笨方法学Vimscript
- Vim 有什么奇技淫巧?
- Vim 和 Emacs 这类经典的软件会被淘汰吗?
- 熟练 Vim 能为我带来什么?
- 为什么不少程序员极度推崇 Vim 和 Emacs,却对 IDE 嗤之以鼻?
- 如何在 Linux 下利用 Vim 搭建 C/C++ 开发环境?
- 关于Vim和Emacs个人理解,不知道大家怎么看?
版权声明:本文标题:VIM使用小技巧 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1724510775h753312.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论