type
date
status
slug
summary
tags
category
password
icon
这里写文章的前言:
在编辑的时候要多想一想,有没有更方便快捷的方式实现?不用怀疑,一定会有的!
Vim中文手册
vim基本动作
- (c)hange: 修改(删除+进入编辑模式);
- (d)elete: 删除;
- (y)ank: 复制;
- (p)aste: 粘贴;
- z: 折叠
vim基本修饰词
- (f)orward: 向前,寻找目标;
- (i)side: 用于删除引号、括号之内的内容;
- (a)round: 常用于删除引号、括号中及两边括号的内容;
- NUM: 数字,代表单词个数,执行行数;
- (t)o: 向前,目标之前;
vim基本名词
- w: 单词;
- s: 句子;
- p: 段落;
- b: 块;
vim基本位置
元位置
- $: 行尾;
- ^: 当前行第一个非空白符位置;
- |: 当前行首;
- w:当前单词/下一单词的位置;
- b:当前单词/上一单词的位置;
- e:当前单词/下一单词的最后一个字符的位置;
组合位置
光标移动常用命令
- h+j+k+l
- 0: 当前行首
- $: 当前行末
- w: 向前移动一个单词(跳转到下一单词词首)
- b: 向后移动一个单词(跳转到上一单词词首)
- e: 移动到单词末尾,再次按下移动到下一单词词尾
- H: 移动到当前screen的顶行
- M: 当前screen中间行
- L: 当前screen的尾行
- Ctrl+u: screen向上移动半页
- Ctrl+d: screen向下移动半页
- Ctrl+f: 全页下移
- Ctrl+b: 全页上移
- 添加标签,便于在标签之间进行跳转:
- ma: 设置一个局部标签,名字为a
- mA: 设置一个全局标签,名字为A
- `a/'a: 跳转到标签a
- delmarks a: 删除标签a
- marks: 查看当前设置的标签
常用插入命令
- i
- I: 在当前行的行首插入文本
- a
- A
- o
- O
- r
- R: 替换光标下的字符,并继续插入
- C: 直接修改掉当前行
- s:
Vim中normal模式下小技巧s
- J: join,合并行;
- %: 如果光标再左括号,则移动到右括号;如果光标再右括号,则移动到左括号;
Ubuntu中将CapsLk与Ctrl键互换
环境
Ubuntu 20.04 步骤
$ sudo vim /usr/share/X11/xkb/keycodes/evdev
搜索 <CAPS> 和 <LCTL>,交换等号后面的数字
注销,重新登录以生效。
使用vim在不同文件之中进行切换
低效的实现
键入
:wq
并打开另一个文件。高效的实现
键入
:e <file-name>
来打开另一个文件。键入
:enew
来编辑一个未命名的新文件。在vim编辑器中查询命令
低效的实现
网络查询。
高效的实现
键入
:help {...}
,例如::help :w
查看:w
的功能,或者:help w
查看命令w的功能。vim中的映射方式(配置.vimrc)
- nmap 普通模式下的递归映射
- imap 插入模式下的递归映射
- vmap 可视模式下的递归映射
- cmap 命令模式下的递归映射
- nnoremap 普通模式下的非递归映射
- inoremap 插入模式下的非递归映射
- vnoremap 可视模式下的非递归映射
- cnoremap 命令模式下的非递归映射
利用上述tip,实现了一些快捷键的映射: 调整是否显示数字。
高效实现
在.vimrc文件中添加
nnoremap <leader>N :set nonumber
,然后直接按下\+N。vim关于向上翻页的技巧
如果光标已经到达了文件的底部而导致太接近页面的底部,可以使用ctrl+f向上翻页,使得光标下方产生很多空白,使得编辑过程更舒适。
vim命令模式下的查找命令技巧
搜索整个单词
vim关键词查找替换命令
:s (substitute) 命令用来查找和替换字符串,具体语法如下:
vim多文件编辑
vim标签页(tab)
vim窗口(windows)
vim缓冲区(buffer)
vim中wildmenu配置
vim多文件编辑总结
- 每次执行vim命令,都是打开了一个vim会话(session);
- vim会为其打开的每一个文件都创建一个buffer缓冲区,每次对文件的修改都会该buffer产生影响,并在保存时一同写入硬盘, 注意在每次切换缓冲区时都需要保存当前缓冲区的修改内容;
- 每次创建一次vim会话时,vim都会创建一个tab,用于显示当前编辑文件,每一个tab可以划分为多个窗口;
- 所有以tab和windows显示的文件都会生成一个buffer缓冲区。
vim多文件编辑关键字
- 标签页关键字前缀:tab
- 缓冲区关键字前缀:b
- 窗口关键字:
:sp {file}
水平分割窗口:vs {file}
垂直分割窗口:close
关闭当前窗口
vim文件目录插件NERDTree
打开NERDTree
本质
纵向划分窗口显示NERDTREE内容, 可以使用vim窗口命令进行光标的切换。
关闭NERDTree
q
快捷键打开
- \+NT: 打开当前工作目录的文件树;
打开方式
- NERDTreeFocus: 光标位于在上次光标停留位置;
- NERDTree: 光标停留在当前文件路径的根目录处;
- NERDTreeToggle: 打开/关闭目录树;
- NERDTreeFind: 光标停留在当前文件上;
光标移动
- P: 移动到当前工作目录的根目录处;
- p: 移动到光标文件/文件夹所在字根目录处;
- K: 移动到光标文件所在目录的第一个文件处;
- J: 与K相似,到最后一个文件
文件夹操作
- o: 非递归开关光标所在文件夹;
- O: 递归打开光标所在文件夹;
- x: 非递归折叠光标所在文件所属的目录;
- X: 递归折叠光标所在文件夹下所有子目录,但是并不折叠光标所在目录;
- e: 在编辑区打开当前文件的目录,按q键退出;
- C: 进入光标所在目录,并将其设置为根目录;
- u: 将当前目录的上一级目录作为根目录,老目录并不打开;
- U: 进入上一级目录,老目录打开;
- R: 刷新当前目录所有文件夹;
文件操作
- o: 在编辑区以替代的方式打开文件;
- go: 预览当前文件(指光标并不切换到编辑区域);
- i: 将编辑区横向划分打开文件;
- s: 将编辑区纵向切分打开文件;
Vim按键映射高级技巧
按键字队列和字符队列
- 按键队列:用户键盘输入的字符队列;
- 字符队列:Vim最终要处理的字符队列;
map命令
常见语法如下
- 第一个字段指出具体的映射命令(:h map-modes);
- n[nore]map: Normal模式;
- i[nore]map: Insert模式;
- v[nore]map: Visual+Select模式;
- [nore]map: Normal+Visual模式;
- [nore]map!: Insert+Command模式;
{lhs}
表示映射前的按键序列;
{rhs}
表示映射后的字符序列;
- map前添加nore表示非递归映射;
- <args>表示map命令的一些参数,常用:
- <buffer>: 表示该映射知识在当前的buffer中定义,而非全局映射;
- <expr>: 表示
{rhs}
是一个Vim
表达式,而不是按键序列; - <silent>: 表示静默映射,不会显示Vim在处理rhs过程中对界面产生的变化。
将tmux中的vim颜色与terminal进行统一
解决办法:首先确保 Shell的环境变量TERM 在Tmux中以及不在Tmux中是相同的。
- 不在tmux中打印TERM的值;
- 在.tmux.conf中添加如下脚本,将tmux中的TERM变量设置为该值:
vim实现自动保存
在实践中总结、完善技能
要一边编译,一边动脑!
- 向前删除:可以使用d0、db等命令;
- 作者:Tdotd
- 链接:https://www.tdotd.top//article/vim-learn
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。