vim 入门笔记
前言
本文的初衷
从知道 vim 开始我就有心学习并尝试过几次,每次都是暂时的心血来潮,最终全部不了了之,就连最基本的 vimtutor 我都是学个两三节就半途而废,所以这次干脆写篇文章,利用几次学习把这篇文章完善起来。既方便自己坚持学习记录,又方便在之后使用中查看和复习。
如果正在看这篇文章的你已经是个老手,或者已经完整练过多次 vimtutor ,那么很遗憾本文并不会对你有更多的帮助。
安装
Windows 安装 Git Bash
Linux 和 MacOS 无需安装
单词
Vim 中的快键键都是有语义的,如果了解下面这些单词,相信你记住快捷键也不是什么难事。
quit
write/read
yank(复制)
paste
delete
change
find
word
forward/backward
up/down
insert/append
do/undo/redo
replace
vim 中的模式与模式切换
Vim 有多种模式,分别是:
- 正常模式 (normal)
- 插入模式 (insert)
- 冒号模式 (或者叫命令模式 command)
- 可视模式 (visual)
启动 Vim (在终端输入 vim <回车>
)后,并不能直接输入字符,vim 默认处于「正常模式」。
- 正常模式
「正常模式」一般用于浏览文件,也包括一些复制、粘贴、删除等操作。击键时一般的键/键组合会被当成功能键,而不会键入对应的字符。
在此模式下,可以通过键盘在文本中移动光标,移动范围从小到大是字符、单词、行、段落和屏幕。
提示:不论位于什么模式,按下 <Esc>
键(有时需要按两下)都会进入「正常模式」。
- 插入模式
「正常模式」下按i
I
a
A
键,会进入「插入模式」。
在「插入模式」下,击键时会写入相应的字符。
- 命令模式
「正常模式」下按 :
(冒号)键,会进入「冒号模式」。
在「冒号模式」下可以执行一些输入并执行一些vim或插件提供的指令,就像在 shell 里一样。这些指令包括设置环境、文件操作、调用某个功能等等。
- 可视模式
「正常模式」下按 v
V
<Ctrl>+v
,都可以进入「可视模式」。
在「可视模式」下,按方向键选择内容。
vimtutor 学习整理
注意:
后文中带尖括号的描述表示键盘按键,比如 <回车>
是指回车按键。
在终端(我这里在 windows 下使用的 Gitbash)输入 vim <回车>
即可进入 Vim 编辑器;
输入 vimtutor <回车>
即可进入 vim 教程。
输入 vim 文件名 <回车>
即可进入 Vim 编辑器编辑该文件。
此时编辑器处于「正常模式」,也叫「normal 模式」。
我们稍后提到时再做介绍。
提示:按下 <Esc>
键,会回到「正常模式」或者撤消一个不想输入的命令。
1
1.1 移动光标
h (左) j (下) k (上) l (右)
请随意按下字母了解如何移动光标。
1.2 Vim 的退出
<Esc> :q!
丢弃修改并退出
<Esc> :wq
保存修改并退出
提示:<Esc>
键不是必须的,只是为了确保当前处于「正常模式」。
1.3 文本编辑之删除
按 x
键删除一个字符
将光标移动至某个单词的起始处,按 dw
删除一个单词(英文)
按 dd
删除一整行
按 d$
会从当前光标处删除至行末
提示: 输入 d
之后,字母 d 会出现在屏幕的右下角,等待接下来输入的命令,此时可以按 <Esc>
撤销。
1.4 文本编辑之插入
按 i
键在光标所在处进入「插入模式」
此时左下角会出现「-- 插入 --」或者「-- INSERT --」的字样,表示当前处于「插入模式」。
按 I
键进入「插入模式」,同时光标会跳到所在行的行首。
此时可以输入内容,也可以选择按 <Esc>
键返回到「正常模式」。
提示:注意大小写,在 vim 中很多字母的大小写有着不同但相似的功能。
1.5 文本编辑之添加
输入 a
可以在光标后进入「插入模式」
输入 A
可以在光标所在行的行末进入「插入模式」
提示:a
i
I
A
都会带您进入插入模式,惟一的区别在于字符插入的位置。
2
2.1 关于命令和对象
前文中我们学习的命令都是 d
和某个动作一起构成的。 比如 d
和 w
表示删除该单词;d
和 $
表示删除至行末。
格式如下: d motion
d
- 删除操作符
motion
- 操作符的操作对象
介绍几个简单的动作:
w
- 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。
e
- 从当前光标当前位置直到单词末尾,包括最后一个字符。
$
- 从当前光标当前位置直到当前行末。
提示:在「正常模式」下仅按代表相应动作的键而不使用操作符,会看到光标的移动正如上面的动作列表所描述的一样。
2.2 使用计数指定动作
2w
使光标向前移动两个单词
3e
使光标移动到第三个单词的末尾
0
使光标移动到行首(^
符号也可以做到这一点,只是按起来没有 0
方便)
提示:现在你一定也可以联想到 2h
就表示光标向前移动两个字符,3j
就表示光标向下移动三行等等;你可以任意组合来练习。
提示:输入数字时你会发现右下角也出现了相应的数字。
2.3 使用计数来删除更多
格式如下: d number motion
d2w
或者 2dw
删除两个单词
d2d
或者 2dd
删除两行
2.4 撤销类命令
u
撤销上一操作
U
撤销对整行的操作
<Ctrl> r
反撤销(windows)
3
3.1 置入类命令
p
粘贴
使用 dd
命令删除一整行内容,然后将光标移动到想要粘贴的位置 上方,输入 p
将该行粘贴置入
3.2 替换类命令
将光标移动到想要替换的字符前,输入 r
回车,接着输入想要的字符,就会把光标处的字符替换。
按 R
键回车进入「替换模式」可以连续替换多个字符。
提示:「替换模式」与「插入模式」相似,不过每个输入的字符都会删除一个已有的字符。
3.3 更改类命令
cw
改变文本直到一个单词的末尾
拆开来看 c
和 w
,c
表示修改,w
表示一个单词
注意:cw
命令会删除光标处至该单词末尾的字符,并直接进入「插入模式」。
提示:修改好内容后记得按 <Esc>
键来返回「正常模式」。
3.4 使用 c
更改更多
更改类操作符的工作方式跟删除类一致。操作格式是:
c [number] motion
c$
表示从光标处开始删除至行末并进入「插入模式」。
4
4.1 定位及文件状态
<Ctrl> g
(Mac)显示状态信息行,显示的内容是当前编辑的文件名和文件中光标位置。
windows 下的 Gitbash 在编辑器下方一直显示当前光标所在行的信息。
G
跳转到当前文件最后一行
gg
跳转到当前文件第一行
行号 G
跳转到指定行
4.2 搜索类命令
/ 要搜索的字符串 <回车>
光标会跳转到搜索的此字符串前
? 要搜索的字符串 <回车>
逆向查找
n
查看下一个搜索的匹配项
N
查看上一个搜索的匹配项
<Ctrl> o
回退到最近的一次搜索匹配项的位置
<Ctrl> i
回退到最新的一次搜索匹配项的位置
4.3 配对括号的查找
将光标移动到任意一个 ( { [ ] } )
处,按下 %
光标会跳转到另一个对应的括号处
4.4 替换命令
下方几个命令中 old
代表替换前的词,new
表示替换后的词
:s/old/new <回车>
替换光标所在行的第一个匹配串
:s/old/new/g <回车>
替换全行的匹配串
:#,#s/old/new/g <回车>
其中两个 #
号分别表示替换操作的起始行和结尾行,表示替换只在这之间进行
:%s/old/new/g <回车>
替换整个文件中的每个匹配串
:%s/old/new/gc <回车>
替换整个文件中的每个匹配串之前会询问是否替换
5
5.1 在 Vim 内执行外部命令
:!外部命令 <回车>
执行外部命令
:!ls
列出所在目录的文件
提示:
所有的外部命令都可以以这种方式执行,包括带命令行参数的那些。
所有的 :
命令都必须敲 <回车>
键结束。
5.2 保存文件
我们知道了当前目录之后,也可以执行保存命令。
:w TEST
会将当前文件重名为 TEST 并保存到当前目录
:!rm TEST
删除文件
5.3 一个具有选择性的保存命令
v motion :w fileName
按下 v
键,进入「可视模式」,也叫「visual 模式」。
接着移动光标会发现会选中移动过的区域并高亮。
然后按 :
将会看到屏幕底部出现 :'<,'>
接着输入 w TEST
此时整个命令为::'<,'> w TEST
,表示将选中内容保存为命为 TEST 的文件
5.4 提取和合并文件
:r TEST
将 TEST 文件的内容置入当前文件的当前光标处
提示:还可以读取外部命令的输出。例如, :r !ls
可以读取 ls
命令的输出,并把它放置在光标下面。
6
6.1 打开类命令
o
在当前光标所在行的下方新起一行,并进入「插入模式」
O
在当前光标所在行的上方新起一行,并进入「插入模式」
6.2 附加类命令
输入 e
可以使在光标英文内容中以单词为单位跳转
6.3 复制粘贴文本
使用操作符 y
复制文本,使用 p
粘贴文本
6.4 设置类命令的选项
输入 :set xxx
可以设置 xxx
选项。一些有用的选项如下:
'ic' 'ignorecase'
查找时忽略字母大小写
'is' 'incsearch'
查找短语时显示部分匹配
'hls' 'hlsearch'
高亮显示所有的匹配短语
选项名可以用完整版本,也可以用缩略版本。
在选项前加上 no
可以关闭选项: :set noic
7
7.1 获取帮助信息
按下 <F1>
键或者 :help <回车>
连续输入两次 <Ctrl> w
可以切换窗口
7.2 创建启动脚本
.vimrc 文件
7.3 补全功能
使用 <Ctrl> d
可以查看可能的补全结果
使用 <Tab>
可以进行命令行补全(Mac)
请确保 Vim 不是在以兼容模式运行: :set nocp
一些 vimtutor 里没提到的命令组合
打开文件,键入
gg
将光标移动到文件的第一行,然后键入dG
以删除其中的所有行或文本。:1,$d
删除所有行或文本
结语
vim 的使用就像编写程序一样,你总要在实践中去掌握它。好了,现在神器在手,就看能不能熟练使用了。
(完)
vim 入门笔记的更多相关文章
- MySQL入门笔记
MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: · rpm包形式 · 通用二进制 ...
- Linux 入门笔记
一开始对linux总有些抵触,黑黑的命令框不知道如何下手,这次因为工作交接的缘故需要负责之前同事的Node后端部分,node,redis这些都是部署在Linux上的,看了几次运维的同学噼里啪啦的敲命令 ...
- Docker入门笔记
Docker入门笔记 随笔记录初学Docker遇到的问题, 以免下次再犯. 本机系统Ubuntu18.04 安装 Docker有2个版本 Community Edition (CE) 社区版(免费) ...
- 每天成长一点---WEB前端学习入门笔记
WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...
- ES6入门笔记
ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- React.js入门笔记
# React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- redis入门笔记(1)
redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...
随机推荐
- js 防抖、截流
突发奇想,在触发事件的时候,一些会频繁触发的事件会不会造成资源的浪费或者大量的计算造成页面卡顿,比如onresize,onscroll,onmousemove等事件. 然后就引出了一个新知识点:防抖. ...
- iOS textView的使用总结
转自:http://blog.csdn.net/zhaopenghhhhhh/article/details/11597887 在.h文件中声明: @interface ProtocolViewCon ...
- Spring Boot 整合Spring Data以及rabbitmq,thymeleaf,向qq邮箱发送信息
首先得将自己的qq开启qq邮箱的POP3/SMTP服务 说明: p,e为路由key. 用户系统完成登录的时候,将{手机号-时间-IP}保存到队列Phone-queue中,msg-sys系统获得消息打印 ...
- 快速掌握zabbix配置
有人说zabbix难点在配置,面对很多的配置项,不知道所以然了,其实我觉得这是没掌握好zabbix的学习方法,要掌握了zabbix的学习思路,可以在一个小时内快速掌握zabbix的各种配置,下面我将重 ...
- ARTS-S C语言多线程传参数
#include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h& ...
- Java多态之动态绑定
目录 Java多态之动态绑定 引用变量的类型 编译时类型 运行时类型 方法绑定 静态绑定 动态绑定 方法表 Java多态之动态绑定 上篇回顾:多态是面向对象程序设计非常重要的特性,它让程序拥有 更好的 ...
- vue实现双向绑定的基础方法
Vue2的组件props通信方式 在Vue2中组件的props的数据流动改为了只能单向流动,即只能由组件外(调用组件方)通过组件的DOM属性attribute传递props给组件内,组件内只能被动接收 ...
- Nginx优化之一
一.Nginx安全优化 1.1:隐藏nginx版本信息 官方配置参数说明:http://nginx.org/en/docs/http/ngx_http_core_module.html#server_ ...
- 起言-----UE4学习方法
1.bilibili 2.官网教程 3.我觉得以上两个就够了 官方文档链接 https://docs.unrealengine.com/ 官网在线视频链接 https://learn.unrealen ...
- JS---案例---左右焦点轮播图(tb)
案例---左右焦点轮播图(tb) <!DOCTYPE html> <html lang="en"> <head> <meta charse ...