vim 基本简记

基础操作

switch mode

  • insert mode --> normal mode: ESC ^c ^[

Insert mode

  • i : insert
  • a : append
  • o : open a line below
  • I : insert before line
  • A : append after line
  • O : append a line above

Command mode

  • :w
  • :q
  • :vs (vertical split)
  • :sp (split)
  • :% s/foo/bar/g (foo --> bar global)

  • ^h : Delete last character (insert mode / shell)
  • ^w : Delete last word (insert mode / shell)
  • ^u : Delete current line (insert mode / shell)
  • ^a : move to line head (shell)
  • ^e : move to line end (shell)
  • ^b : Back shift (shell)
  • ^f : Forward (shell)

Visual mode

  • v : select character
  • V : select line
  • ^v : select block

移动

Fast-moving(行间移动)

  • w/W 移到下一个word/WORD开头
  • e/E下一个word/WORD
  • b/B回到上一个word/WORD开头, 可以理解为backword

(word指的是以非空白符分割e的单词, WORD以空白符分割的单词)

行间搜索移动

  • f{char}可以移动到char字符上,t{char}移动到char前一字符
  • 如果第一次没搜到, 可以用分号;/逗号,继续搜该行下一个/上一个
  • F搜索当前行当前光标前

行间水平移动

  • 0移动到行首第一个字符, ^移到行首第一个非空白字符
  • $ 移动到行尾, g_移动到行尾非空白字符

垂直移动

  • 使用()在句子间移动
  • 使用{}在段落间移动

页面移动

  • gg/G移动到文件开头和结尾,可以使用^o快速返回上个光标位
  • H/M/L跳转屏幕Head, Middle, Lower
  • ^u/^f 上下翻页(upword/forword), zz把屏幕置为中间

增删改查

删除

  • normal模式下, x快速删除一个字符
  • d(delete)配合文本对象快速删除一个单词
  • daw/dw:(d around word) 删除单词及周围空格
  • diw:删除单词不包括周围空格
  • dt{char}:删除直到{char}的内容
  • 均可搭配数字来执行多次

修改

  • r(replace): 替换, normal模式下,r{char}: 光标处字符-->{char}
  • s(substitute): 删除当前字符并进入插入模式;S:删除当前整行并进入插入模式
  • c(change):caw/cw(change a word)删除文本对象并进入插入模式
  • ct{char}:删除直到{char}的内容并进入插入模式

查询

  • / / ? 前向或者反向搜索
  • n / N 跳转到下一个或者上一个匹配
  • * / # 进行当前单词的前向或后向匹配

搜索替换

  • substitute命令, :[range] s[ubstitute]/{pattern}/{string}/[flags]
  • range表示范围 比如:10,20: 10-20行, %表示全部, pattern是要替换的模式, string是替换后的文本
  • Flags是替换标志位,几种常用: g(global)表示全局范围内执行;c(confirm)表示确认,可以确认或拒绝修改;n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
  • 例如:self --> this :% s/self/this/g 一到六行:1,6 s/self/this/g

多文件操作

概念:
Buffer: 内存缓冲区
Window: Buffer的可视化分割区域
Tab: 组织Window为一个工作区
<TAB> 补全命令
:ls 列举当前缓冲区

2-7 pass

复制粘贴/寄存器

  • normal模式下 y(yank)复制/p(put)粘贴,剪贴d/p
  • vim里操作的是寄存器而不是系统剪贴板
    默认我们使用d删除或y复制的内容都放到了“无名寄存器”中

技巧:使用x和p命令可以实现字符的调换

  • :reg命令查看所有的寄存器
  • 使用"{register}指定寄存器
  • "ay将文本复制到a寄存器中
  • ""代表默认寄存器
  • "+代表系统剪切板
  • "+p将系统剪贴的代码复制到vim中

注:服务器模式下若无系统剪贴板,则使用inset模式下使用^v进行粘贴。若格式错乱,则使用:set paste命令先设置粘贴模式然后再进行粘贴。在命令行模式下使用:set paste命令设置粘贴模式,然后进入insert模式进行粘贴,此时autoindent功能失效,我们使用:set nopaste命令恢复autoindent功能。

:echo has('clipboard'):查看是否支持复制到系统剪切板, 若支持, :set clipboard=unnamed 可以直接复制的系统剪切板; :e!重新加载文件,且不保存。

使用宏完成批量操作

  • qa:开始宏录制到寄存器 a
  • I" Esc:在行首添加双引号
  • A" Esc:在行尾添加双引号
  • q:退出宏录制
  • @a: 使用录制的宏
  • 命令行使用normal模式下命令,使用v全选后按:进入命令行模式输入normal <命令>

Vim补全

  • C-n / C-p 关键字补全
  • C-x C-f 文件名补全
  • C-x C-o 代码补全,需开启文件类型检查,安装插件

Vim配置

配置文件

~/.vimrc

键位映射

To be continued...

添加新评论