vim之基础使用篇幅

1,344 阅读2分钟

原文链接:mrzhang123.github.io/2017/11/05/…

最近由于升级macOS High Sierra导致vscode总是崩溃(在即将到来的稳定版中已解决),在用了sublime和webstrom之后,实在是不喜欢,所以想起了之前配置好但是一直不怎么用的vim(因为实在是用不习惯),硬着头皮用了几次之后,给我的第一个感觉是YouCompleteMe选择代码太爽了,所以开始慢慢研究,觉得缺什么就加什么,一步步改进,这篇文章主要总结一下vim的一个基础用法不涉及插件。

1. vim的模式

vim有四个模式,分别为:

  • 正常模式 (Normal-mode) :按ESC进入,大部分快捷键都在这里使用
  • 插入模式 (Insert-mode):按a,i,o进入
  • 命令模式 (Command-mode):按:进入
  • 可视模式 (Visual-mode):按v进入,该模式下所有的快捷导航按键都可以用

使用vim经常需要在这些模式下来回切换

2. 插入字符(正常模式进入插入模式)

a:after 当前字符之后键入字符
i:insert 当前字符之前键入字符
o:open linel 另起一行键入字符

3. 快速导航(正常模式和可视模式)

h:光标往后走一个位置
j:光标跳到下一行
k:光标跳到上一行
l:光标往前走一个位置
w(world):让光标一个单词一个单词的往后跳
b(backup): 让光标一个单词一个单词的往前跳
e:到每个单词的末尾
0:跳到当前行行首
$:跳到当前行行尾

*跳到指定行

跳行有三种方式

  • 正常模式下直接输入'12j'表示相对于当前行向下走12行
  • 正常模式下键入'12G'可以跳转到第12行
  • 命令模式下输入:12可以跳转到第12行

3.1 对指定行做标记

在vim中对制定行做标记方便快速切换

正常模式下直接键入m+标记,例如直接键入ma就可以将当前行标记为a,如果想要跳到指定标记,键入'+标记,例如'a即可快速跳到a标记的所在行

4. 文件搜索

正常模式

键入/+关键字,按下n开始从前往后搜索,按下N则反向搜索
键入?+关键字,按下n开始从后往前搜索,按下N则反向搜索
在当前光标所在单词直接键入*可以搜索光标所在的单词,按n可以跳转

如果想要让搜索结果高亮,可以在.vimrc中配置

set hlsearch

这样在vim中搜索出结果就会高亮,但是这个高亮不会消失,想要让搜索的高亮消失,要进入命令模式输入noh,即:noh

5. 快速编辑(可视模式)

在正常模式 (Normal-mode) 下按v即可进入可视模式 (Visual-mode) ,在该模式下所有的快捷导航快捷键都可以用,可以进行快速编辑

v:选中

  • V:选中一行
  • ctrl+v:进入v-block,可以使用hjkl进行选择

y:复制

  • yy直接复制一行

d:删除(剪切)

  • dd删除一行
  • v选中使用d删除相当于直接用x删除

r:替换

  • 直接替换单词

p:粘贴

备注:

  • 所有的快速导航和快速编辑都可以在前面加数字进行操作
  • .可以重复上一次操作

6. 撤销与恢复撤销(正常模式)

u:撤销 ctrl+r:恢复上一步被撤销的操作

7. 粘贴与移动(命令模式)

之前有提到过在正常模式下使用y进行复制,但是这个方法有一个缺点,即必须要让光标处于当前行。如果想要不依靠光标进行复制,移动就需要使用:copy:move

7.1 copy

命令格式::[range]copy{address}range表示拷贝范围,address表示目标地址

简写::co或者:t

示例:

  • :3t.:拷贝第三行到当前光标的下一行 (.表示当前行)

  • :t3:拷贝当前行到第三行的下一行

  • :t.:拷贝当前行到光标的一下行,相当于Yp和yyp

  • :t$:拷贝当前行到最后一行

  • :'<,'>t0:拷贝所选区域到文本的开头处,这里的操作步骤是:现在visual 模式下选中文本,然后输入:,接着t0

7.2 move

简写::mo或者:m

用法与copy相同

8. 代码折叠

设置代码折叠

" 打开折叠
set foldable
" 设置使用语法折叠
set foldmethod=syntax

这样设置后发现打开文件默认是折叠的,如果想打开文件默认不折叠可以设置

set foldlevelstart=99

配置完成后可以使用快捷键进行代码折叠打开操作

zc:关闭折叠
zo:打开折叠
za:打开/关闭折叠互相切换

zR:打开全部折叠
zM:把所有折叠起来
zO:打开当前折叠快下的所有方法

我的vim配置(不断改进中)

github.com/MrZhang123/…