linux学习笔记4 vim

Linux学习笔记 4 vim编辑器

之前一直觉得vi/vim的指令比较繁琐,所以用的都是轻量一些的nano,但是轻量的代价就是如果想要进行一些复杂的操作就不太方便了,另外好几次在没有联网的linux系统计算机上编辑文件时,也发现只有自带的vi而没有安装nano,操作起来就很生疏。另外vim不光是一个“文本”编辑器,他还是一个“程序“编辑器,可以对代码进行高亮显示,多窗口显示等等,另外熟悉了vi的快捷键之后,编辑效率还是要高上不少的,所以还是学习一下吧。

vi是所有的unix like系统都会内置的编辑器,其他的编辑器不一定存在,vim是vi的升级版,兼容所有vi的操作,还可以对程序进行高亮甚至检查语法,以及增加了一些参数的显示。

vi的使用

基本使用

三种模式

vi有三种模式:

  1. 一般指令模式

    vi打开文件时进入的就是一般指令模式,该模式下可以移动光标,对文本进行删除,复制,粘贴,搜索等操作,也可以通过按键切换到另外两个模式,该模式下无法编辑(打字输入)文本内容。

  2. 编辑模式

    一般指令模式按下i,I,o,O,a,A,r,R中的任何一个字母之后会进入到编辑模式(详细模式不一样),按下esc返回一般指令模式。进入编辑模式后,只有esc键时特殊的,其他按键都当作一般输入。

  3. 命令行命令模式

    按下: / ?三个中任意一个,光标会移动到最下面的一列,进入到命令行模式,该模式下可以进行查找数据,读取,保存,大量替换字符,退出vi,设置编辑器(如显示行号)等操作。

一些按键组合

vi有大量的快捷键,这里记录部分用得比较多的。

一般指令模式

vbird的书里面貌似都是用的”列“来表述我们文本中的一行。

移动光标以及查找
按键作用
←或者h光标左移
↓或者j下移
↑或者k上移
→或者l右移
n(数字)+上面的方向键向指定方向移动n次
ctrl+f屏幕向下翻页
ctrl+b屏幕向上翻页
ctrl+d向下移动半页
ctrl+u向上移动半页
+光标移动到非空白字符的下一行
-上一行(感觉这两个指令就是切换行?)
n空格光标向右移动n个字符
0或者home到达这一行的起始字符处
$或者end到达这一行的最后一个字符处
H移动到当前屏幕最上方的一行的第一个字符处
M移动到屏幕中央的一行的第一个字符
L移动到屏幕下方一行的第一个字符
G移动到文件的最后一行
nG移动到文件的第n行
gg移动到文件的第一行(1G)
n Enter向下移动n行
/word从光标处开始向下查找word字符串
?word向上查找
n按照当前查找顺序,查找下一个
N和当前相反的查找顺序查找下一个
:n1,n2s/word1/word2/g查找n1到n2行之间的word1并替代为word2 /gc 在替换时要求用户确认
删除 复制 粘贴
按键功能
x,Xx向后删除一个字符(del),X向前删除(backspace 退格)
nx/X连续向后/前删除n个字符
dd删除光标所在的那一行
ndd删除光标所在的向下n行
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行的所有数据
d$删除光标到所在行最后一个字符
d0删除光标所在到所在行的第一个字符
yy复制光标所在行
nyy复制光标所在行以及下面的n行
y1G复制光标所在行到第一行的所有数据
yG复制光标所在行到最后一行
y0复制光标所在行第一个字符的所有数据(不包括光标圈起来的那个字符。光标实际在字符的左侧)
y$复制到行尾的数据
p,Pp 将已复制的内容在光标的下一行粘贴,P则为上一行
J将光标所在行与下一行合并成一行
n+c+方向向一个方向重复删除n行
u撤销
ctrl+r取消撤销
.重复执行上一个动作
编辑模式

一般模式进入到编辑模式有多种按钮,他们是不一样的

按钮作用
i,I进入插入模式,i为从当前光标处插入,I为在当前行的第一个非空白字符前开始插入
a,A进入插入模式,a从光标所在的下一个字符出开始插入(append),A表示从所在行的最后一个字符出开始插入。
o,O插入模式,o表示向下插入新的一行,O为向上插入新的一行
r,R进入取代模式,r只取代光标所在的字符一次,R会持续接受输入,持续替换。
esc退出到一般模式
命令行模式
按键作用
:w保存到硬盘中
:w!强制写入(前提是你要有权限,而文件属性是r)
:q退出vi
:q!修改过文件,但是不考虑保存,强制退出
:wq保存并退出
ZZ文件没变化就直接离开,否则先储存再离开
:w filename将数据储存成另外一个文件
:r filename编辑数据时,读入另一个文件的数据
:n1,n2 w filename将n1到n2行的内容保存到文件中
:! command暂时离开vi,在命令行中执行命令
:set nu显示行号
:set nonu不显示行号

vim暂存盘

vim在编辑的时候会在文件的目录下再新建一个隐藏的.swp文件作为暂存盘,记录用户的操作,如果编辑异常中断(ctrl+z或者死机),下次编辑该文件的时候会提示你有错误出现。(如果打开一个正在被编辑的文件也会出现这个提示)

如果之前是异常退出的,可以使用R,来恢复之前的工作,如果是有其他人在编辑,你只是想查看文件的话可以使用O,以只读模式打开文件,也可以使用E继续编辑。如果你确定不需要该暂存盘,使用D删除即可。

vim额外功能

区块选择

我们可以选择一个区块范围。并进行粘贴,删除等操作,很多传统编辑器做不到这种操作(个人感觉类似于excel,可以选中一个块而不是整个行)

区块选择在一般指令模式下进行

按键作用
v选择光标经过的地方的字符
V选择光标经过的行
ctrl+v区块选择,可以用长方形的方式进行选择
y复制选择区域
d删除选择区域
p粘贴复制的区域

区块选择

粘贴区块

多文件编辑

我们可以使用:r filename在当前编辑窗口中读入某个文件的内容,但是这样读入的是整个文件,总还是有一些不便,这时我们可以使用多文件编辑,在编辑器内打开多个文件,并按需求切换。并且由于是一个编辑器打开的多个文件,他们直接也可以直接使用vi的指令进行复制。vim file1 file2即可打开两个文件。

1
2
3
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出vim打开的所有文件

多窗口编辑

多文件编辑虽然已经让我们的操作变得简单了,但是如果某些时候我们想要对照的查看编辑两个文件,频繁的切换总还是有些麻烦,这种情况下我们可以在编辑器中打开多个窗口进行编辑。在命令行模式中输入:sp [filename可选(如果希望在新窗口打开新文件就加上文件名,不加的话就是当前的文件)]

窗口间的切换使用ctrl+w+↑(k)ctrl+w+下(j),使用ctrl+w+q为退出窗口。

vim 补全

关键字提示/补全功能是在插入模式下使用的 都是用ctrl+x作为命令前缀。

  • ctrl+x -> ctrl+n 通过正在编辑的文件的内容作为关键字进行补全(先输入ctrl+x 在输入 ctrl+n)
  • ctrl+x -> ctrl+f 以当前目录内的文件名作为关键字,提示补全
  • ctrl+x -> ctrl+o 以扩展名作为语法补充,使用vim内置关键字

第一个组合键对于补全之前输入过的关键字有效,第三个则会提示你符合文件扩展名的关键字。

内置关键词补全

还是相当好用的。

vim环境设置

当我们在文件中搜索了某个字符串,然后退出了程序,下次进入的时候会发现,我们依旧在搜索模式中,甚至编辑其他的文件,该关键词依旧处于高亮状态,并且重复进入之前编辑的文件时,我们的光标还停留在之前退出时所在的地方。

因为vim**会主动记录用户的行为,方便用户之后继续作业。**记录文件位于~/.viminfo,另外是否缩进,是否设置高亮,这些都是可以在环境参数中自己设置的,命令行模式下输入:set all可以查看所有的设置(超级多.)。

记录一些常用的环境参数,

命令解释
:set u设置行号
:set nonu取消行号
:set autoindent自动缩进
:set noautoindent关闭自动缩进
:set backup是否自动备份,如果开启,在编辑一个文件时原始文件会被另存为一个名为filename~的文件,一般关闭
:set backspace=(0/1/2)编辑模式下,是否允许使用退格键删除字符(某些发行版默认不允许),设置为2的时候就是可以删除,0/1只能删除刚刚输入的字符,无法删除之前就有的。
:set syntax on/off开启/关闭语法高亮
:set bg=dark/light背景色调
:set ruler是否在右下角显示状态说明
:set showmode是否显示当前的模式
:set显示与默认值不同的设置参数 (all的话,就是现实所有的环境参数设置)

这个设置如果只是在一个vim窗口中进行设置的话,只作用于当前窗口,不过我们可以修改*/etc/vimrc*配置文件(不存在就手动创建)手动写入全局配置参数。

示意图

补充

这篇文章中的:set 我全部使用了全角符号,因为editor.md把:s解析成了emoji…真是令人尴尬

vim真的相当的强大,不过真的要把那么多指令都熟练掌握还是有不小的难度,刚学完vim,在对文件进行操作之前总要想一想第一步该怎么做,不过虽然麻烦一些,但是从今天开始能用vi/vim就不用nano了,毕竟熟能生巧嘛,之后应该还会遇到一些问题,都会记录在这下面了。

comments powered by Disqus
本站访客数:
使用 Hugo 构建
主题 StackJimmy 设计