全栈开发知识库

Vim使用教程

Better, Stronger, Faster

首先Vim有三种模式:

  • Normal
    该模式下不能写入,修改要在该模式进行。在Insert模式中可以使用ESC键来返回到Normal模式。
  • Insert
    该模式下可以进行写入。在Normal模式下使用按i键进行Insert模式。
  • Visual
    该模式是可视模式,可以选中, v进入字符可视模式。 V进入行可视模式。 Ctrl+v进入块可视模式。

    Ctrl+v进入后使用j/k选中多行同一列,按I输入内容,再按ESC键等一秒后会在所有选中行都插入该内容,是批量增加注释的神器。

    下面说一下Normal状态下的一些命令,所有的命令都要在Normal状态下执行:

进入Insert模式

i进a追o开行,小写动作在光标,大写动作到行尾

  • i 进入insert模式
  • a(append) 在光标后进行插入,直接进入insert模式
  • o 在下一行插入新行
  • O 在上一行插入新行
  • I 在行首插入
  • A 在行尾插入

在VIM中,有相当一部分命令可以扩展为3部分:

  • 开头的部分是一个数字,代表重复次数;
  • 中间的部分是命令;
  • 最后的部分,代表命令的对象。

比如,命令3de中,3表示执行3次,d是删除命令,e表示从当前位置到单词的末尾。整条命令的意思就是,从当前位置向后,删除3个单词。类似的,命令3ce表示从当前位置向后,删除三个单词,然后进入编辑模式。

可以看到,命令组合的前两个部分比较简单,但第三个部分也就是命令对象,技巧就比较多了。所以接下来,我就与你详细介绍下到底有哪些命令对象可以使用。

其实,对命令对象并没有一个完整的分类。但我根据经验,将其总结为光标移动命令和文本对象两种。

第一种是光标移动命令。比如,$命令是移动光标到本行末尾,那么d$就表示删除到本行末尾;再比如,4}表示向下移动4个由空行隔开的段落,那么d4}就是删除这4个段落。

移动光标

  • h 左移: 在键盘的最左边
  • j 移到下一行 : 像向下的钩子
  • k 移到上一行
  • l 右移: 在键盘的最右边

  • gg 跳到文件开头
  • G 跳到文件结尾

  • $ 行尾

  • 0 行首
  • ^ 行首第一个非空字符

  • e 向右移动一个单词 (end)

  • w 向右移动一个单词,与e的区别是w是把光标放到下一个单词的开头,而e是把光标放到这一个单词的结尾。 (word)
  • b 移动到上一个单词开头 (back)
  • :59 移动到59行
  • #l 移动光标到该行第#个字的位置,如5l
  • f字符 跳到行内下一个指定字符,如fa 跳到下一个a

  • ctrl+g 列出当前光标所在行的行号等信息


  • ctrl+b:向上滚动一屏 backward
  • ctrl+f:向下滚动一屏 forward
  • ctrl+u:向上滚动半屏 up
  • ctrl+d:向下滚动半屏 down

删除文字

  • x 删除光标所在位置的一个字符
  • #x 删除光标所在位置后的#个字符,如6x就是删除后面的6个字符。
  • X 大写的X为删除光标所在位置前的一个字符
  • #X 删除光标所在位置前的#个字符
  • dd 删除当前行,并把删除的行存到剪贴板中
  • d$ 删除到行尾
  • d0 删除到行首
  • dw 删除一个单词
  • di" 删除双引号中的内容 delete inside
  • da" 删除双引号中的内容以及双引号 delete all
  • di( 删除括号中的内容
  • #dd 从光标所在行开始删除#行。如5dd就是删除5行
  • v/ctrl+v: 使用h、j、k、l移动选择内容,然后按d删除。其中v是非列模式,ctrl+v是列模式

修改

  • cc 修改整行(清空并进入插入模式)
  • cw 修改一个单词
  • c$ 修改到行尾

复制粘贴

  • yy 拷贝当前行
  • #yy 拷贝当前所在行往下的#行文字
  • yw 复制当前光标所在位置到字尾处的位置
  • #yw 复制当前光标所在位置往后#个字
  • y$ 拷贝光标至本行结束位置
  • y 拷贝选中部分,在Normal模式下按v会进入到可视化模式,这时候可以上下移动进行选中某一部分,然后按y就可以复制了。

  • p 在光标所在的位置向下开辟一行,粘贴

  • P 在光标所在的位置向上开辟一行,粘贴
  • 剪切: 按dd或者ndd删除,将删除的行保存到剪贴板中,然后按p/P就可以粘贴了。

替换

  • r 替换光标所在处的字符
  • R 替换光标所到之处的字符,直到按下esc键为止
  • :%s/old/new/g 用new替换文件中所有的old
  • :%s/old/new/gc,同上,但是每次替换需要用户确认
  • :s/old/new/g 光标所在行的所有old替换为new
  • :s/old/new/ 光标所在行的第一个old替换为new

记忆技巧: 百分号(%)斯(s)老(old)虎(new)狗(g), s是substitute替换的意思, g是global全局的意思, c是confirm确认的意思。

撤销

  • u 撤销、回退
  • ctrl + r 恢复刚才的撤销操作

搜索

  • /关键字 先按/键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按n会往后寻找到您要的关键字为止。N是上一个匹配。

  • ?关键字 同上,只不过?是往上查找

缩进缩出

  • >> 当前行缩进
  • #>> 当前光标下n行缩进
  • << 当前行缩出
  • #<< 当前光标下n行缩出

  • : set nu 会在文件每一行前面显示行号

  • :wq 保存并退出
  • :w 保存
  • :q! 退出不保存
  • :saveas <pat> 另存为
  • :e filename 打开文件
  • `:sav filename 保存为某文件名
  • ZZ: 命令模式使用大写ZZ直接保存并退出

单词记忆技巧

动词:
- d : 删除delte - y : 复制 yank - c : 修改 change - v : 选中 visual - p : 粘贴 paste

名词:

  • w : 单词 word
  • s : 句子 sentence
  • p : 段落 paragraph
  • i : 内部 inside
  • a : 整个 around

寄存器,Vim提供了很多寄存器,如果我们想要把vim中复制的内容放到系统的粘贴板中, 就需要指定寄存器:

  • "+: Linux/Windows/Mac通用

例如:

  • "+yy: 复制当前行内容到系统粘贴板
  • v选中内容后使用"+y复制选中内容到粘贴板

  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
本页由 Markdown 自动渲染 · 共 628 篇笔记