0%

linux实用工具:(三)Vim编辑器

1.Vim的哲学

在编程的时候,你会把大量时间花在阅读/编辑而不是在写代码上。所以,Vim 是一个多模态编辑器:它对于插入文字和操纵文字有不同的模式。Vim 是可编程的(可以使用 Vimscript 或者像 Python 一样的其他程序语言),Vim 的接口本身也是一个程序语言:键入操作(以及其助记名) 是命令,这些命令也是可组合的。Vim 避免了使用鼠标,因为那样太慢了;Vim 甚至避免用 上下左右键因为那样需要太多的手指移动。

2.Vim的编辑模式

Vim的设计以大多数时间都花在阅读、浏览和进行少量编辑改动为基础,因此它具有多种操作模式:

  • 正常模式:在文件中四处移动光标进行修改
  • 插入模式:插入文本
  • 替换模式:替换文本
  • 可视化(一般/行/块)模式:选中文本块
  • 命令模式:用于执行命令

在不同的操作模式下,键盘敲击的含义也不同。比如,x 在插入模式会插入字母x,但是在正常模式会删除当前光标所在的字母,在可视模式下则会删除选中文块。

在默认设置下,Vim会在左下角显示当前的模式。 Vim启动时的默认模式是正常模式。通常你会把大部分时间花在正常模式和插入模式。

你可以按下 <ESC> 从任何其他模式返回正常模式。 在正常模式:

  • 键入 i 进入插入 模式
  • R 进入替换模式
  • v 进入可视(一般)模式
  • V 进入可视(行)模式
  • <C-v> (Ctrl-V, 有时也写作 ^V)进入可视(块)模式
  • : 进入命令模式。

因为你会在使用 Vim 时大量使用 <ESC> 键,所以可以考虑把大小写锁定键重定义成 键 。

3.Vim基本操作

3.1 插入文本

在正常模式,键入 i 进入插入模式。现在 Vim 跟很多其他的编辑器一样,直到你键入 返回正常模式。 你只需要掌握这一点和上面介绍的所有基础知识就可以使用 Vim 来编辑文件了 。

  • 缓存、 标签页、窗口
    Vim 会维护一系列打开的文件,称为“缓存”。一个 Vim 会话包含一系列标签页,每个标签页包含一系列窗口(分隔面板)。每个窗口显示一个缓存。跟网页浏览器等其他你熟悉的程序不一样的是,缓存和窗口不是一一对应的关系;窗口只是视角。一个缓存可以在_多个_窗口打开,甚至在同一个标签页内的多个窗口打开。这个功能其实很好用,比如在查看同一个文件的不同部分的时候。

Vim 默认打开一个标签页,这个标签也包含一个窗口。

  • 命令行
    在正常模式下键入 : 进入命令行模式。 在键入 : 后,你的光标会立即跳到屏幕下方的命令行。 这个模式有很多功能,包括打开,保存,关闭文件,以及 退出 Vim。
<esc>模式下操作 含义
:q 退出(关闭窗口)
:w 保存(写)
:wq 保存然后退出
:e <文件名> 打开要编辑的文件
:ls 显示打开的缓存
:help <命令> 打开命令的帮助文档
:help :w 打开:w 命令的帮助文档
:help w 打开 w 移动的帮助文档

Vim 的接口其实是一种编程语言,Vim 最重要的设计思想是 Vim 的界面本身是一个程序语言。键入操作 (以及他们的助记名) 本身是命令, 这些命令可以组合使用,这使得移动和编辑更加高效。

3.2 移动

多数时候你会在正常模式normal下,使用移动命令在缓存中导航。在 Vim 里面移动也被称为 “名词”, 因为它们指向文字块。详见下表:(注意以下命令或按键均需要在normal模式下使用)

功能 操作
基本移动 h j k l (左/下/上/右)
以一个词为单位去移动 w :下一个词 b :词初 e :词尾
以一行为单位去移动 0 :行初 ^ :第一个非空格字符 $ :行尾
在屏幕中进行移动 H :屏幕首行 M: 屏幕中间 L: 屏幕底部
翻页 ctrl-u :上翻 ctrl-d :下翻
文件头尾快捷键 gg :文件头 G :文件尾
依据行数进行移动 :<行数>
向前/向后查找在本行的字符(小写表示向前查找,大写表示向后查找) f<字符> t<字符> F<字符> T<字符>
搜索字符串/正则表达式 :/<字符串或正则表达式>

3.3 选择文本

可视化模式名 按键操作
可视化(一般) v
可视化行 V
可视化块 ctrl+v
  • 编辑文本
    所有你需要用鼠标做的事, 你现在都可以用键盘:采用编辑命令和移动命令的组合来完成。 这就是 Vim 的界面开始看起来像一个程序语言的时候。Vim 的编辑命令也被称为 “动词”, 因为动词可以施动于名词。
操作 实现功能
i 进入插入模式但是对于操纵/编辑文本,不单想用退格键完成
O / o 在之上/之下插入行
d{移动命令} 删除 {移动命令}.例如:dw 删除词, d$ 删除到行尾, d0 删除到行头
c{移动命令} 改变 {移动命令}.例如:cw 会删除词并进入insert模式
x 删除字符(等同于 dl)
s 删除字符并进入insert模式
r 替换字符(在需要替换字符位置处按r,再输入需要替换的字符)
ctrl+r 重做(撤销的反面)
u 撤销
y 复制 :yy可以复制当前行 yw可以复制一个单词
p 粘贴
可视化模式 + 操作 选中文字并进行上述操作(例如可以通过hjkl移动光标再复制选中区域)
~ 改变光标位置处字符的大小写
  • 计数移动
    你可以用一个数字来结合“名词”和“动词”,这会执行指定操作若干次。

    • 3w 向前移动三个词

    • 5j 向下移动5行

    • 7dw 删除7个词

  • 开启绝对行号/相对行号

    • 开启绝对行号,ESC进入命令行模式,输入:set number;关闭需要ESC进入命令行模式,输入:set nonumber
    • 开启相对行号,ESC进入命令行模式,输入:set rnu;关闭需要ESC进入命令行模式,输入:set nornu
  • 修饰语

​ 你可以用修饰语改变“名词”的意义。修饰语有 :i表示“内部”或者“在内“ ,a表示”周围“。

输入操作 功能
ci( 改变当前括号内的内容
ci[ 改变当前方括号内的内容
da' 删除一个单引号字符串, 包括周围的单引号

注:我们可以使用%在成对的结构中切换位置,例如在()\‘’\“”\[]等结构

3.4 分屏显示

  • Vim和终端分屏显示

vim打开文件后,进入ESC并输入:vert terminal,实现垂直分屏显示(直接输入terminal是水平分屏显示)。关闭terminal时,需要在terminal中输入ctrl+d

  • Vim多个文件分屏显示

Vim打开是输入参数-O\-o,-O表示垂直分屏,-o表示水平分屏