当前位置:网站首页>一小时掌握vim基础用法
一小时掌握vim基础用法
2022-08-08 04:29:00 【péripatéticien】
一、编辑区模式
vim编辑区的常用模式有3种:
- 标准模式(默认):移动光标、其他各种文本处理任务;
- 插入模式(按
i进入):输入文字; - 可视化模式(按
v进入):选择文本。
任何时候,只要按下 ESC 键,就会回到标准模式。由于在该模式下可以任意移动光标,并且能够方便地转换到其他各种模式,所以用好vim的一条重要原则是:尽量多使用标准模式。能在标准模式下做的事,就不要在其他模式下做。
二、移动光标
执行
vim [文件名]
后进入的就是标准模式。在该模式下,我们可以使用 h、j、k 和 l 这四个按键来移动光标。其中 h 、l 控制的是左、右,j 、k 控制的是下、上。当然你也可以通过方向键来移动光标。
仅仅有这些是不够的,我们还需要更多的快捷指令:
| 命令 | 功能 |
|---|---|
gg | 移动光标至第一行的第一个字符处 |
G | 移动光标至最后一行的第一个字符处 |
[n]G | 跳转到第 [n] 行。例如跳转到第三行就是 3G |
[n]% | 跳转到文档的百分之 [n] 部分 |
b / w | 向前 / 后移动到下一个单词的首字符 |
B / W | 向前 / 后移动到下一个WORD的首字符 |
ge / e | 向前 / 后移动到下一个单词的结尾字符 |
gE / E | 向前 / 后移动到下一个WORD的结尾字符 |
0 / $ | 将光标移动至行首 / 行尾 |
( / ) | 向前 / 后移动一个句子 |
{ / } | 向前 / 后移动一个段落 |
需要注意的是,单词之间的分隔符是空格或标点符号(例如连字符,句号,逗号,引号等),而WORD(广义单词)的分隔符只有空格。
三、文本对象
一个文本对象由两部分组成:修饰符和对象名称。
- 修饰符:
a表示该对象及其后面的空格字符;i表示对象本身。 - 对象名称:
w为单词,s为句子,p为段落。
例如要查看一个单词对象是什么样子的,可以先按 v 进入可视化模式,然后按下 iw。下面比较 viw 和 vaw 的区别:
viw:

vaw:

常用的文本对象命令列在下表中:

对于嵌套括号,我们只需要在文本对象前加入相应的量词就可以实现不同的选中范围。
光标置于 c,输入 v2i(:

光标置于 c,输入 v2a(:

量词不仅可以放到文本对象前面,也可以放到光标移动命令前面,例如 3j 就是向下移动3行。
四、修改文本
| 命令 | 功能 |
|---|---|
u | 撤销上一次编辑 |
ctrl + R(mac上是 control + R) | 重做,即撤销上一次撤销 |
V | 选中当前行 |
d | 剪切文本 |
y | 复制文本 |
p | 在光标后粘贴文本 |
P | 在光标前粘贴文本 |
dd | 剪切光标所在行 |
yy | 复制光标所在行 |
D | 剪切光标到行尾的文本 |
x | 剪切光标所在位置的字符 |
注意 d 和 y 无法单独使用,需要在后面跟一个移动或者文本对象。
交换相邻两个字符是
xp,交换相邻两行是ddp。
五、插入模式

从标准模式进入插入模式后,不论插入或者用退格键、删除键修改了多少
文本,都算一个编辑动作。所以我们应尽量避免在插入模式下使用方向键和删除键、退格键编辑文本,多使用标准模式,不仅编辑效率高,而且每个编辑动作改动都不大,方便进行精细的撤销 / 重做调整。
六、命令模式
在标准模式下输入英文冒号 : 即可切换到命令模式。与编辑区模式不同,按下冒号键后窗口最底部会显示冒号,表示目前已进入命令模式了,等待继续输入后续命令。这时你可以继续输入命令,并按回车键执行,或者用 ESC 键退回标准模式。
最常用的命令为 :wq,即保存并退出。
6.1 文本搜索
输入 / 可进入搜索模式,例如要搜索 print,则可输入 /print 然后按下回车键,使用 n 或 N 来查看下一个/上一个匹配项。
6.2 多窗口编辑
假设我们在编辑 a.txt 的时候需要参考 b.txt 的内容。
首先使用vim打开 a.txt,然后输入 :sp 或 :vsp 进行水平或垂直切分窗口。再输入 :e b.txt 即可在当前窗口打开 b.txt。
窗口切换:
- 跳转到左侧窗口:
ctrl+w+h; - 跳转到右侧窗口:
ctrl+w+l; - 跳转到下侧窗口:
ctrl+w+j; - 跳转到上侧窗口:
ctrl+w+k;
编辑完后,可输入 :wqa 保存并退出所有窗口(a 即all的意思)。
七、vim的配置
vim的配置存储在 ~/.vimrc。每次vim启动时,如果发现存在这个文件,就会执行其中的内容。任何能在vim里手动执行的命令都可以写在 .vimrc 文件里启动时自动执行,一般用来定义快捷键、函数、命令,以及设置运行时属性等。
vim基础配置:
set et
set sw=2
set ts=2
set nowrap
set number
set clipboard+=unnamedplus
set nobackup
set noswapfile
set splitbelow
set splitright
set incsearch
let mapleader=","
nnoremap ; :
nnoremap : ;
vnoremap ; :
vnoremap : ;
nnoremap <leader>e :e $MYVIMRC<CR>
nnoremap <leader>s :so $MYVIMRC<CR>
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
nnoremap <F2> :set wrap!<CR>
filetype indent plugin on
syntax on
附录
vim键位图:

边栏推荐
- Inside outside l think MindSpore AI framework, heavy industry gathering, huawei big extraordinary path of the model
- 【Template Engine】velocity
- 以0为底或以1为底对图片迭代次数的影响
- Some excellent blog recommendations for Qt event learning reference
- Strong Net Cup 2019 - Casual Bet (Stacked Injection)
- leetcode: 455. 分发饼干
- Monitoring tool Prometheus and project summary, 220805,,
- Risk control strategy must be learned | This method of mining rules with decision trees
- 【多任务CTR】阿里ESMM:Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conve
- shell原地更新终端输出信息
猜你喜欢

使用 Presto 和 Alluxio 在 AWS 上搭建高性能平台来支持实时游戏服务

MindFusion.WPF Pack 2022.R1

awk语法-03-awk表达式(if语句、while循环、for循环)、awk中执行shell命令

强网杯 2019-随便注 (堆叠注入)

Monitoring tool Prometheus and project summary, 220805,,

Exercise equipment responsive pbootcms template class web site

数据在内存如何分布的?

vulnhub-DC-3靶机渗透记录

【Template Engine】velocity

向往的开源之多YOUNG新生 | 从开源到就业的避坑指南来啦!
随机推荐
ES6解构赋值的使用说明
NetCore使用Dapper查询数据
leetcode 112.路经总和 递归
6G时代新用户面设计和关键技术
项目分析(嵌入式产品Web化)
leetcode: 874. 模拟行走机器人
After being unemployed for 6 months at home, I bought a house with full payment through outsourcing: the industries you look down on are often very profitable
奇怪的魔法(组合数)
Heterogeneous on the Graph paper to share 】 【 small sample learning: HG - Meta: Graph Meta - learning over Heterogeneous Graphs
Qt 事件学习参考的一些优秀博客推荐
VSCode opens some records of C (embedded) projects
MySQL from entry to entry [20W word collection]
【多任务模型】《Multi-Faceted Hierarchical Multi-Task Learning for a Large Number of Tasks with Multi-dimens
开发如何尽可能的避免BUG
The type of block in the database buffer cache
亚马逊云科技Build On学习心得
A line of code counts the number of occurrences of the specified string in the text
Strong Net Cup 2019 - Casual Bet (Stacked Injection)
Redis persistence mechanism, master-slave, sentry, cluster parsing cluster solution
【直播回顾】昇思MindSpore易用性SIG2022上半年回顾总结