Linux 文本编辑
1. 实验介绍
1.1 实验内容
对于运维工作来说,一项重要的工作内容就是修改和编辑某些重要的配置文件。而在实际的编辑工作中,也时常会有关于 linux 编程的需求,所以本节内容在于带领了解一些 Linux 下文本编辑的内容。
1.2 实验知识点
- vim 使用
- gedit 简介
- 文本编辑相关的命令
2. vim
对于所有的 Linux 发行版来说,都内置了 vi 编辑器,而 vim 是一款高级文本编辑器,除了支持 vi 编辑器的功能之外,还提供了更丰富的功能。
借用一些 vim 官方的说法。vim 是一种高可配置的文本编辑器,通常被称为 programmer‘s editor,即程序员的编辑器,但是不仅仅是程序员,vim 可以适用于各种文字编辑。
2.1 首次使用 vim
vim 是一种模式编辑器,按照官方对于模式的分类。这里我们介绍三种基本的模式分别是普通模式(normal),插入模式(insert)和命令模式(commandline)。在普通模式下,键入的字符会被当作命令,而在插入模式下,键入的字符会被当做文本。
要启动vim,我们可以输入命令:
$ vim
如下图所示,我们可以看到当前的 vim 的一些有关信息。
对于刚刚启动的 vim, 处于 normal 普通模式下。如果需要进到插入模式,我们可以键入 i 命令,切换到插入模式。在插入模式下,可以输入文本内容,并且底部会显示 insert,由于这里是中文,所以显示的是插入,用以判断处于插入模式,这时我们可以输入一些文本内容,如下所示:
此时,如果我们需要返回普通模式,只需按
在移动光标时,以上面的图片为例,出现的波浪符号(~)代表的是不存在的行。
2.2 模式切换
对于从普通模式切换到插入模式下,除了使用 i 命令,我们还有一些其他的实现方式。
命令 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
0 | 在当前行前插入一个新行 |
需要注意的是每次要先回到普通模式才能切换成以不同的方式进入插入模式
对于从普通模式到命令行模式的切换,只需要在普通模式下输入 :冒号,或者 / 或 ? ,在编辑器界面的最后一行(不是文本内容的最后一行),就会出现一个输入的冒号或 / 或 ?,在此,我们可以输入一些命令,例如下图所示,我们在标准模式下输入:
:set number
通过输入回车键
2.3 光标移动
上下移动
对于 vim 来说,除了使用方向键来移动光标之外,我们还可以在标准模式下通过使用 hjkl 键来移动光标:
- h 键,代表左移
- j 键,向下移动
- k 键,向上移动
- l 键,向右移动
- w 键,移动到下一个单词
- b 键,移动到上一个单词
除此之外,我们还可以使用与数字结合的方式,例如普通模式下输入 5l,代表向右移动 5 位。此处需要说明的是,下面介绍的很多命令都能与数字键结合使用,并不会特殊说明。希望大家能够自己多尝试练习使用,加深印象。
行首和行尾
对于移动到行首和行尾,我们可以分别使用下面的方式去实现。
- HOME 键,移动到行首
- END 键,移动到行尾
- ^ 符号,普通模式下,该符号会移动到行首。
- $ 符号,普通模式下,该符号会移动到行尾。
移动行
- gg 普通模式下,移动到文件的第一行
- G 移动到文件的最后一行
- nG 这里 n 代表跳转的行号
对于如上所述的普通模式,我们说过,普通模式下,键入的字符会被当作命令执行。
我们还可以通过输入 :n,这里的 n 代表行号,执行后可以将光标跳转到对应的行的行首。
位置
对于文本文件很多的时候,可能需要定位当前光标的位置,如下图所示,勾选的内容中的 1,13 代表所在的位置,行号和列号。
这一功能在实验环境中是默认开启的,未开启的情况下可以通过如下方式启用:
:set ruler
对应的取消该功能的操作为:
:set noruler
2.4 删除操作
对于文本内容的操作来说,我们可以切换到 Insert 模式下进行操作,而下面的内容,是在普通模式下通过命令进行操作。
命令 | 说明 |
---|---|
x | 删除游标所在的字符 |
X | 删除游标所在的前一个字符 |
dd | 删除整行 |
dw | 删除一个单词(不适用于中文) |
d$ 或 D | 删除至行尾 |
d^ | 删除至行首 |
dG | 删除至文档结尾处 |
d1G | 删至文档首部 |
删除字符
在普通模式下,删除字符,我们可以通过键入 x 执行删除操作。键入 x 执行的操作是删除光标所在位置的字符,如果你需要删除指定位置的字符,可以通过移动光标,然后键入 x。
删除一行
要删除整行,我们可以使用 dd 命令。在普通模式下,我们输入 dd 命令会删除光标所在的 行,而不是单个字符。
删除多行
删除多行操作,需要使用 ndd,这里 n 代表的是一个正数,例如使用 10dd,代表着从光标所在行开始计算,往下的 10 行内容都将被删除。
删除换行符
除了删除文本内容之外,我们还可以将两行内容链接成一行内容,对于有过编程基础的同学可能知道,文本的换行都是通过换行符实现的,所以此处其实是删除 换行符。对于删除换行符,我们使用的是大写字母 J,例如如下图所示:
光标所在行为第一行,此时切换到普通模式下,输入大写的字母 J,结果如下所示:
2.5 撤销和重做
以我们常见的删除命令为例,如果你不小心实现了误操作,删除了不应该删除的行,此时你可以通过 u 命令来撤销操作。
相应的,如果撤销了太多次,此时我们可以通过 ctrl + R 键来撤销上一次的撤销操作,这儿可能有一点绕口。简单为例,如果我们的操作处于一根时间线上,那么 u 和 ctrl + R 则分别是往左和往右。
2.6 复制粘贴和剪切
- 普通模式中使用 y 复制
- 普通模式中,yy 复制游标所在的整行( 3yy 表示复制3行 )
- 普通模式中,y^ 复制至行首,或 y0 。不含光标所在处字符。
- 普通模式中,y$ 复制至行尾。含光标所在处字符。
- 普通模式中,yw 复制一个单词。
- 普通模式中,y2w 复制两个单词。
- 普通模式中,yG 复制至文本末。
- 普通模式中,y1G 复制至文本开头。
- 普通模式中使用 p 粘贴
- 普通模式中,p(小写)代表粘贴至光标后(下)
- 普通模式中,P(大写)代笔粘贴至光标前(上)
- 普通模式中使用 dd 剪切
- 前面讲得 dd 删除命令其实就是剪切,这里不在赘述
- ddp,快速实现光标所在行于它下面的行的交换
2.7 快速查找
对于搜索字符串的方式,我们可以通过 /string 和 ?string 的方式,这里的 string 代表需要搜索的字符串,/ 和 ? 分别代表向下和向上搜索。对于有多个查询结果的时候,我们可以通过 n 或 N 来定位下一个或上一个查询结果。
对于搜索单词时,我们设定忽略大小写以及取消设定:
:set ignorecase
:set noignorecase
2.8 保存和退出
对于使用 vim 编辑文件来说,我们常使用如下的三种方式:
$ vim
$ vim file # file 为已存在的文件名
$ vim file # file 为未存在的文件名
对于常见的几种打开方式保存退出的操作有:
- w 保存
- w filename 保存为 filename
- q 不保存退出
- q! 强制退出,使用 ! 强制执行
- wq 保存退出
- wq! 强制保存退出
- wq filename 保存为 filename,并退出
针对上述三种打开文件的方式需要使用对应的保存退出的方法,这其中是否修改文件也会有相应的影响。
例如,使用 $ vim,未修改时,退出直接使用 :q ,修改后,直接退出需要使用 :q! 。保存时,需要指定文件名,使用 w filename。
2.9 多文件编辑
编辑多个文件
编辑多个文件有两种形式,一种是在进入 vim 前使用的参数就是多个文件。另一种就是进入 vim 后再编辑其他的文件。同时创建两个新文件并编辑
$ vim 1.txt 2.txt
默认进入 1.txt 文件的编辑界面
- 命令行模式下输入 :n 编辑 2.txt 文件,可以加 ! 即 :n! 强制切换,之前一个文件的输入没有保存,仅仅切换到另一个文件
- 命令行模式下输入 :N 编辑 1.txt 文件,可以加 ! 即 :N! 强制切换,之前文件内的输入没有保存,仅仅是切换到另一个文件
进入 vim 后打开新文件
- 命令行模式下输入 :e 3.txt 打开新文件 3.txt
- 命令行模式下输入 :e# 回到前一个文件
- 命令行模式下输入 :ls 可以列出以前编辑过的文档
- 命令行模式下输入 :b 2.txt(或者编号)可以直接进入文件 2.txt 编辑
- 命令行模式下输入 :bd 2.txt(或者编号)可以删除以前编辑过的列表中的文件项目
- 命令行模式下输入 :e! 4.txt,新打开文件 4.txt,放弃正在编辑的文件
- 命令行模式下输入 :f 显示正在编辑的文件名
- 命令行模式下输入 :f new.txt,改变正在编辑的文件名字为 new.txt
2.10 多个窗口
注意:Ctrl + w 是浏览器关闭标签页的快捷键,所以如果用网页实验就没法用 Ctrl + w 来操作 Vim 窗口了。
vim 可以在一个界面里打开多个窗口进行编辑,这些编辑窗口成为 vim 的视窗。打开方法有很多种,例如可以使用在命令行模式下输入 :new 打开一个新的 vim 视窗,并进入视窗编辑一个新文件(普通模式下输入 Ctrl + w 也可以),除了 :new 命令,下属列举的多种方法也可以在命令模式或普通模式下打开新的视窗(熟悉一些常用的内容即可):
- 命令行模式下输入 :sp 1.txt 打开新的水平分屏视窗来编辑 1.txt
- 命令行模式下输入 :vsp 2.txt 打开新的垂直分屏视窗来编辑 2.txt
- 普通模式下 Ctrl + w s 将当前窗口分割成两个水平的窗口
- 普通模式下 Ctrl + w v 将当前窗口分割成两个垂直的窗口
- 普通模式下 Ctrl + w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即 :q!
- 普通模式下 Ctrl + w o 打开一个视窗并且隐藏之前的所有视窗
- 普通模式下 Ctrl + w j 移至下面视窗
- 普通模式下 Ctrl + w k 移至上面视窗
- 普通模式下 Ctrl + w h 移至左边视窗
- 普通模式下 Ctrl + w l 移至右边视窗
- 普通模式下 Ctrl + w J 将当前视窗移至下面
- 普通模式下 Ctrl + w K 将当前视窗移至上面
- 普通模式下 Ctrl + w H 将当前视窗移至左边
- 普通模式下 Ctrl + w L 将当前视窗移至右边
- 普通模式下 Ctrl + w - 减小视窗的高度
- 普通模式下 Ctrl + w + 减大视窗的高度
2.11 配置 vim
对于 vim 的配置来说,这里只是简单介绍。
对于一些特定的环境来说,我们可能会经常使用一些命令,对此,我们可以通过配置文件来配置自己的环境。
vim 的配置文件是 vimrc 文件。我们可以通过打开 vim 编辑器,使用如下命令来查看。
:scriptname
这个命令会列出 vim 的一些加载脚本。对于当前用户来说,我们只需要在用户的根目录下创建 .vimrc 文件,写入相应的配置项。就可以使配置生效。在创建该文件后,再次使用 :scriptname 的时候,你也会发现 .vimrc 的文件路径出现。如下,给出一个 vimrc 的示例:
" 设置与 vi 编辑器不兼容
set nocompatible
" 设置自动缩进
set autoindent
" 设置显示光标位置
set ruler
" 显示行号
set number
该配置文件只有简单的四行配置,但是在我们保存文件后,再次打开 vim 使用时,就能看出相应的区别,例如显示行号。
2.12 命令行模式
在上面的内容中我们简单的介绍命令行模式下经常使用的一些命令,例如:vim
# 不兼容 vi
:set nocompatible
# 兼容
:set compatiable
# 显示行号
:set number
# 不显示行号
:set nonumber
# 行号缩写的方式
:set nu
:set nonu
对于命令行的定义严格意义上应该是,当我们在使用冒号 : ,/ 或 ? 时,光标会位于屏幕的底部,我们可以在那里输入命令或者搜索文本内容,这被称为命令行。
不仅如此,对于命令行来说,也有一些快捷的操作方式,例如使用上下键寻找历史命令等,此处不再描述。下面我们将介绍一些使用 :set [option] 项的内容:
# 显示行尾为 $ ,显示制表符即 tab 键为 ^I
:set list
# 设置 tab 键的字符长为 4
:set tabstop=4
# 文件只读
:set readonly
# 设置编码格式
:set encoding=utf-8
# 设置文件编码
:set fileencoding=utf-8
# 设置 tab 为4个空格
:set softtabstop=4
# 生成备份文件
:set backup
# 不生成备份文件
:set nobackup
2.13 其它模式
除了我们上述介绍的三种模式外,vim 还有一些相对使用较少的其它模式,简单介绍如下。
视觉模式
视觉模式(visual mode),这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim 的"文本对象"也能和移动命令一样用在这个模式中。
视觉模式可以由正常模式下按 v 键或 V 键进入
替换模式
替换模式(replace mode),可以在普通模式下通过大写的 R,进入到替换模式下,此模式下,对光标所在字符执行替换操作。而小写的 r,只能替换单个字符。
选择模式
选择模式(select mode)类似于视觉模式,因为选择模式用于选择文本内容、不同的是,选择模式针对的是 gui 版本的 vim,例如我们使用如下命令打开文件:
$ gvim
对于选择模式来说,我们可能需要手动开启该模式,使用:
:set selectmode+=mouse
这时,我们可以通过鼠标去选择对应的行,这时左下角会显示 选择 字样,
选择的内容会被高亮显示,并且我们输入的任意字符将会替代被选择的内容,然后切换到插入模式下。
2.14 内置教程
对于上面的部分内容来说,有些操作并不是常用的内容,只需要简单了解即可。vim 还有一个内置教程,为 vimtutor,只需在命令行界面输入该命令:
$ vimtutor
显示结果如下图所示:
3. gedit
gedit 是一个 GNOME 桌面环境下兼容 UTF-8 的文本编辑器。它使用 GTK+ 编写而成,因此它十分的简单易用,有良好的语法高亮,对中文支持很好,支持包括 gb2312、gbk 在内的多种字符编码。gedit 是一个自由软件。这是 Linux 下的一个纯文本编辑器,但你也可以把它用来当成是一个集成开发环境(IDE),它会根据不同的语言高亮显现关键字和标识符。
不同于 vim,gedit 属于桌面环境下的文本编辑器,并且我们可以在命令行模式下通过 gedit 命令来打开文件,如下所示:
$ gedit file1
对于 gedit 编辑器来说,我们可以通过图形界面很容易的去配置和使用。而对于 gedit 命令的一些常用选项,我们可以使用 --help 参数来查看:
4. 总结
在本节内容中,我们学习了一些 vim 一些相关内容。本节内容的目的在于教会大家 vim 一些常见的操作方式和设置项,对于绝大多数的使用场景来说应该已经足够,但是并未覆盖 vim 的全部内容,需要大家自己去学习更加深入的内容。