Vim学习笔记

zeekrs published on
13 min, 2485 words

Categories: editor

Tags: vim

本笔记记录一些 vim 的学习过程 主要用于熟练掌握 vim 基础章节来自慕课网的视频教程 《玩转 Vim 从放弃到爱不释手》

初识 Vim 想说爱你不容易

1. vim 的基础操作

普通模式进入插入模式的基本操作

操作符助记符作用
iinsert从光标前插入
Iinsert从行前插入
aappend从光标后插入
Aappend从行后出入
oopen a line从光标下方插入新的一行
Oopen a line从光标上方插入新的一行

从插入模式回到普通模式 Esc

普通模式下 按 : 进入命令模式

命令模式下的基本操作

操作符助记符作用
wwrite保存
qquit退出
wqsave and quit保存并退出

2. Vim,为什么你有这么多模式

  • 普通模式

    • 普通模式下可以进行各种移动呵命令操作
    • 大部分情况下是制作浏览而不是在编辑
  • 插入模式

    • 插入模式和大部分文编编辑器一致 主要用于编辑文本
  • 命令模式

    • 命令模式下 可以执行 vim 命令
    • 比如 :sp(split) 竖分屏 :vs(vertical split) 横分屏
    • 使用:% s/foo/bar/g 进行全局替换
  • 可视化模式

    • 普通模式下使用 v 进入 visual 选择
    • 使用 V 选择行
    • 使用 ctrl + v 进行块选择

3. Vim,插入模式小技巧

  • ctrl + h 删除上一个字符
  • ctrl + w 删除上一个单词
  • ctrl + u 删除当前行
  • ctrl + c 代替 Esc 回到普通模式
  • gi 从普通模式到上一次插入的位置

4. Vim,快速移动大法

操作符助记符作用
h-左移
j-下移
k-上移
l-右移
wword移动到下一个单词开头
Wword移动到下一个单词开头(已空白符分隔)
eend word移动到下一个单词的结尾
Eend word移动到下一个单词的结尾(已空包符分隔)
bback word移动到上一个单词的开头
Bback word移动到上一个单词的开头(已空白符分隔)
f{char}find移动到{char}字符 (;搜索下一个 ,搜索上一个)
F{char}find反向搜索,同上
t{char}until移动到{char}字符的前一个字符(;搜索下一个 ,搜索上一个)
T{char}until方向搜索,同上
0-移动到行首
^-移动到行首(不包含空白字符)
$-移动到行尾
g_-移动到行尾(不包含空白字符)
{}-在段落间进行移动
gg-移动到文件开头
G-移动到文件结尾
ctrl + oold移动到上一次光标的位置
ctrl + uupward向上翻页
ctrl + fforward向下翻页
zz-把当前光标放到屏幕中间

5. Vim,快速增删改查

操作符助记符作用
xcut删除一个字符
ddelete删除(dw diw dd dt{char} d$ d0)
rreplace替换当前光标下的字符
Rreplace替换当前光标下的字符,直到退出输入模式
ssubstitute删除当前字符并进入插入模式
Ssubstitute删除一整行并进入插入模式
cchange类似 d 的使用方式,删除后进入插入模式
/-搜索输入的字符(n移动到搜索的上一个,N移动到搜索的下一个)
#-匹配光标上的单词,移动到上一个
*-匹配光标上的单词,移动到下一个

6. Vim,如何搜索替换

:[range] s[substitute]/{pattern}/{string}/[flags]

range 表示范围 比如:10,20 表示 10-20 行 %表示全部
pattern 表示要替换的模式 正则表达式
string 表示替换后的文本
flags表示执行的方式 g表示全局范围内执行 c表示确认 可以确认或者这拒绝 n报告匹配的次数而不进行替换


7. Vim,多文件操作

  • Buffer
    打开的文件在内存中的缓冲区
  • Window
    Buffer 可视化的分割区域
  • Tab
    可以组织窗口为一个工作区

Buffer 的操作

操作符助记符作用
:lslist show列出当前缓冲区列表
:b{n}-跳转到第 n 个缓冲区
:bpreprevious跳转到上一个缓冲区
:bnextnext跳转到下一个缓冲区
:bfirstfirst跳转到第一个缓冲区
:blastlast跳转到最后一个缓冲区
:b {buffer_name}-跳转到指定名称的缓冲区

Window 的操作

操作符助记符作用
<Ctrl+w>s :spwindow split水平分割
<Ctrl+w>v :vswindow vertical split垂直分割
<Ctrl+w>wwindow在窗口间循环切换
<Ctrl+w>hwindow切换到左边的窗口
<Ctrl+w>jwindow切换到下边的窗口
<Ctrl+w>kwindow切换到上边的窗口
<Ctrl+w>lwindow切换到右边的窗口
<Ctrl+w>Hwindow将窗口移动到左边
<Ctrl+w>Jwindow将窗口移动到下边
<Ctrl+w>Kwindow将窗口移动到上边
<Ctrl+w>Lwindow将窗口移动到右边

Tab 的操作(不常用)

操作符作用
:tabe[dit] {filename}在新标签页中打开 {filename}
T把当前窗口移动到一个新的标签页
:tabcc[lose]关闭当前标签页及其中的所有窗口
:tabo[nly]只保留活动标签页,关闭所有其他标签页
:tabn[ext] gt切换到上一个标签
:tabp[revious] gT切换到下一个标签

8. 什么是 Vim 的 text object

  • Vim 里文本也有对象的概念, 比如一个单词、一短句子、一个段落.
  • 通过操作文本对象来修改要比只操作单个子字符高效很多.

[number]<command>[text object]
number 表示次数
command 表示命令 d(elet) c(hange) y(ank)
text object 表示要操作的文本对象 比如 w(ord) s(entence) p(aragraph)

example: diw daw ciw caw viw vaw yiw yaw
i 表示 inner
a 表示 around


9. Vim 复制粘贴于寄存器的使用

  • 复制粘贴的使用

    • Normal 模式
      • 普通模式下复制粘贴分别使用 y(ank) 呵 p(ut) , 剪切 d(elet)
      • 配合 v(isual)命令选中所要复制的文本
      • 配合文本对象使用 如 yiw 复制一个单词 yy 复制一行
    • Insert 模式
      • 和其他为本编辑器差不多 使用 cmd+v 进行粘贴
  • 什么是 Vim 的寄存器

    • Vim 里操作的是寄存器而不是系统剪切板
    • 默认使用 dd 删除或 y 复制的内容都放到了无名寄存器
    • 通过"{register}前缀可以指定寄存器,不指定默认使用无名寄存器
    • a-z 都可以作为寄存器使用 "ayaw 表示将复制的单词存入寄存器a
    • 可使用 :reg {register} 查看寄存器内容
    • 可使用 "ap 粘贴存在寄存器a中的内容
    • 复制专用寄存暖气 "0 系统剪切板 "+

10. 强大的 Vim 宏(macro)

  • 什么是 Vim 宏

    • 宏可以看成是一系列命令的集合
    • 我们可以用宏录制一系列操作,然后用于回放
    • 宏可以把一系列命令用在多行文本上
  • 如何使用宏

    • 使用q来录制,同时也是 q 结束录制
    • 使用q{register}选择要保存的寄存器,把录制的命令保存在其中
    • 使用@{register}回放寄存器中保存的一系列命令

11. Vim 补全大法

  • 常见的三种补全类型
    • 使用 ctrl + n 和 ctrl + p 补全单词
    • 使用 ctrl + x 和 ctrl + f 补全文件名
    • 使用 ctrl + x 和 ctrl + o 补全代码 需要开启文件类型检查 安装插件

12. 给 Vim 换个配色

  • 使用 :colorscheme 显示当前的主题配色
  • :colorscheme <C+d> 可以显示所有的配色
  • :colorscheme {scheme_name} 更换主题


编写 Vim 配置,我的 Vim 我做主

vim 配置文件 ~/.vimrc

  • 常用设置 如 :set nu colorscheme onedark
  • 常用的 vim 映射 如 noremap <leader> w :w<cr>
  • 自定义的 vimscript 函数 和 插件配置

Vim 中的映射比较复杂 源于 vim 有多种模式

  • 设置一下leaderlet mapleader = "<Space>"
  • nnoremap 普通模式下的键位映射
  • inoremap insert 模式下的映射
  • com! 命令模式下执行的操作

使用:h option-list 查找所有的 vim 常用设置选项

Vim 映射迷人眼

  • 基本映射 基本映射指的是 normal 模式下的映射
    使用map就可以实现映射 比如 :map <C-d> dd
    使用unmap取消映射比如 :unmap <C-d>
    nmap/vmap/imap定义映射只在 normal/visual/insert 模式下有效
  • *map系列命令有递归的风险
  • Vim 提供了非递归映射,这些命令不会的递归解释
    使用 *map的对应版本 nnoremap/vnoremap/inoremap
  • 任何情况下 都应该使用非递归映射

学习和使用配置

  • 了解常见常见的配置选项
  • 学习和使用 Vim 映射

从零配置自己的 NeoVim

常 Vim 安装插件,竟如此简单

参考

插件推荐