vim编辑器常用技巧

(一).写作缘由:

在使用linux的过程中,无论是运维管理还是普通用户都难免对操作文件,拥有一款得心应手的编辑器是必不可少的。可以说绝大部分使用者都是使用的vi/vim编辑器,不仅仅是因为它是linux系统默认安装了的软件,还因为它体积很小,功能强大。

vim(VI iMproved)编辑器可以说是vi(visual interface)的扩展版,vim支持语法高亮等特性,以及各种高效率的操作。使得编辑文件的效率得到提高,当然这需要使用者对其相对较熟悉。


(二).vim的常见模式:

(1).vim的模式非常多,这里只介绍一部分模式,包括编辑模式,插入模式,末行模式,本文也包含替换模式和可视化模式的内容

a.编辑模式:就是使用vim打开文件或者直接输入vim之后的模式,左下角没什么特殊的提示,如下两图:


b.插入模式:一般按i,a,s,o或其大写等能进入插入模式,在这个模式下输入的内容会写到文件。如下图,在左下角会提示编辑器此时正处于该状态:


c.末行模式:此模式是在编辑模式下输入':'后进入的模式,该模式下的功能很多包括执行一些其他shell命令等,如下图所示:


d.替换模式:该模式是在编辑模式下按R键进入,在该模式下对文本的操作是替换操作,和覆盖差不多,如下图:


e.可视化模式:这种模式和windows里面的多选差不多,在编辑模式下按v或者V键能进入该模式,可以对选中的内容进行操作,如下图:


(2).这些模式之间是可以相互转换的,下图描述了上面几种模式的相互转换:



(三).vim的常用技巧:

(1).打开文件:

vim filename: 打开名为filename的文件,光标处于文件的开始位置。

vim +n filename:打开文件后,直接让光标处于第n行的行首。

vim + filename: 打开文件后直接处于最后一行行首(注意加号两边是空格)。

vim /pattern filename: 打开文件后使光标定位到第一次被pattern匹配到的模式位置(pattern是匹配模式,之后要确定一下,如下图:)


(2).关闭文件:一般在末行模式或者编辑模式下关闭文件

末行模式下:

q:退出(不会保存内容,若此时编辑了内容,是不能退的,会让你确认是否保存)

wq: 保存并退出

q!: 不保存并退出

w:保存

w!: 强制保存(需要特定权限)

x:与wq一样


编辑模式下:

zz:保存退出


(3).编辑器的一些常见设置:可以更改/etc/vimrc文件或者~/.vimrc,在末行模式下添加如下内容,也可以在末行模式下执行如下内容:

:set nu 让编辑器行号(nu为number)

:Syntax on开启语法高亮

:set ts=4设置tab长度为4

:set autoindent 设置自动对齐

:set cindent C语言编码时,内嵌代码自动缩进

这个设置完全可以按自己的喜好设置,网上很多,这里就不一一例举了。


(4).光标移动:

a.逐个字符移动

h: 左移光标

l: 上移光标

j: 下移光标

k: 右移光标

数字n与以上几个键组合: 可一次移动n个字符(例如3j: 光标从当前位置开始下移三个位置)

b.逐个单词移动

w: 移到下个单词词首

e: 移到当前或下一个单词的词尾

b: 跳到当前或上一个单词的词首

数字键n与上面的键组合: 可一次移动n个单词位置(例如5w: 向后移动五个单词的位置,且到单词首字母位置)


(5).行内跳转:

0: 跳到行首(绝对行首)

^: 跳到行首(相对行首)

$: 跳到行尾


(6).行间跳转:

G: 跳到最后行

gg: 跳到第一行

n + G: 跳转到第n行

在末行模式下跳转只需输入行号即可跳转,如下图:


(7).翻屏操作:

Ctrl + f: 向下翻一屏

Ctrl + b: 向上翻一屏

Ctrl + d: 向下翻半屏

Ctrl + u: 向上翻半屏


(8).删除单个字符:

x: 删除光标所在处的单个字符

nx: 删除光标所在处及向后的共n个字符


(9).删除命令d:

a.编辑模式下,与跳转命令组合使用可以删除多少内容:

dw: 删除一个单词

dd: 删除当前光标所在行

ndd: 删除包括当前光标所在行内的n行

b.末行模式下

m,nd:删除m到n行

.,+5d:删除当前行到当前行之后的5行(共5行)

删除当前航到100行

删除当前行到倒数第10行

c.说明:删除内容并没有被立即清空,而是在内存中,最后一次删除内容可用于粘贴


(10).粘贴命令:

p: 如果删除或复制为整行内容,则粘贴到光标所在行的下方,如果复制或者删除内容不是整行,则粘贴到光标所在字符的后面

P: 如果删除或复制为整行内容,则粘贴到光标所在行的上方,则粘贴到光标所在字符的前面


(11).复制命令y:

用法与d命令一样,将d换成y即可,也可在变模式和末行模式下进行,使用方法完全一样。


(12).修改命令c: 先删除内容,再转换为插入模式。

删除当前光标所在位置到末行的内容,然后进入插入模式。


(13).替换命令r:

按了r之后,输入要替换成的字符

也可与n组合,达到同时替换多个字符(一般不会那么干,很少有意义)

R:直接进入替换模式,输入的内容将覆盖原有的内容


(14).撤销编辑:

u: 撤销前一次编辑操做

nu:撤销前n次操作(一般只保留50次修改操作)

撤销刚刚撤销的操作:Ctrl + r


(15).重复前一次编辑操作

.: 按'.'即可重复上一次操作,例如:dd会后,再按'.',则会继续执行dd命令


(16).可视化模式(如下图):

v: 按字符选取

V: 按矩形选取


(17).查找替换:

/pattern:从文件首向尾部查找

?pattern:从当前光标位置向文件首部查找

n:跳到下一个匹配到的对象

N:跳到上一个匹配到的对象

(18).查找并替换(在末行模式下):

m,ns/pattern/string/g(全局替换)i(忽略大小写)

效果完全一样)

在第m行到n行搜索partern(可以正则),替换成string,即使一行有多个全部替换,忽略大小写

例如:

s/pattern/string/: 替换当前行匹配到的pattern的第一个对象为string

s/pattern/string/g: 替换当前行匹配到的pattern的所有对象为string

.,$s/pattern/string/g:替换从当前行到最后一行匹配到的pattern的所有对象为string

1,$s/pattern/string/g:替换文本中所有的匹配到的pattern为string

%s/pattern/string/: 替换每一行匹配到的pattern的第一个对象为string

%s/pattern/string/g: 替换每一行匹配到的pattern的所有对象为string


说明: '/'与'@'效果在这里是一样的。


(四).如有不足之处,还请斧正:

这里只是写了vim的一少部分常用的功能,若你所找的答案不在其中,还请使用man帮助或者其他相关资料进行查阅。

相关文章

普通模式 >G 增加当前行到文档末尾处的缩紧层级 $ 移动到本行的末尾 . 相当于一个...
原文连接: https://spacevim.org/cn/layers/lang/elixir/ 模块简介 功能特性 启用模块 快捷键 语言专属...
原文连接: https://spacevim.org/cn/layers/lang/dart/ 模块简介 功能特性 依赖安装及启用模块 启用模...
 =   赋值操作符,可以用于算术和字符串赋值 +        加法计算     -        减法运算...
1.根据包名来查看指定的APP指定数据 adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数...
ctrl+F 向下翻页 ctrl+B 向下翻页 u 取消最近一次操作 U 取消当前行的操作 ZZ 保存当前内容并退出 gg 跳...