全文目录
- 1 简单易用的 Nano (入门之选)
- 1.1 适用场景
- 1.2 安装命令
- 1.3 基础操作
- 1.4 优点
- 2 功能强大的 Vim
- 2.1 适用场景
- 2.2 安装命令
- 2.3 模式说明
- 2.4 常用命令
- 2.4.1 普通模式
- 2.4.2 编辑模式
- 2.4.3 可视模式
- 2.4.4 命令行模式
- 3 参考文献
写在前面
作为运维或者研发,日常工作经常会对一些文件进行编辑处理,无论是修改配置文件、编写脚本还是处理日志,Linux提供了丰富的文本编辑工具。本文将详细介绍命令行下的主流编辑器Nano和Vim,并附上实用技巧,助你快速上手。
补充说明:本文作为《Linux工作台文件操作命令全流程解析(基础篇)》、《Linux工作台文件操作命令全流程解析(进阶篇)》系列文章的延续,重点介绍了 Linux 下核心的文本编辑命令,对支持我们的日常工作,提升工作效率,具有重要的作用。
1 简单易用的 Nano (入门之选)
1.1 适用场景
新手友好,快速编辑小型文件,其轻量级特性使其成为终端环境下编辑小型文件的高效工具,尤其适合需快速修改配置或脚本的场景。
1.2 安装命令
- 工具安装
# Debian/Ubuntu
sudo apt install nano
# CentOS/RHEL
sudo yum install nano
注:多数系统默认自动安装 Nano 的,如果系统没有安装,可以使用上述命令自行安装。
- 初识 Nano
如下是 nano 的工作编辑界面很简单,底端还有完整的操作提示,很友好。
1.3 基础操作
- 文件操作
# 打开文件
nano filename.txt # 如果文件存在就打开,不存在就新建,如 nano test.txt
# 保存文件
Ctrl + O → 输入文件名 → Enter(若文件已存在直接保存)
# 退出编辑器
Ctrl + X(如有未保存修改会提示是否保存)
# 异常退出修复
nano filename.txt --recover
- 常用快捷键
快捷键 | 功能描述 |
---|---|
Ctrl + O | 文件保存 |
Ctrl + X | 退出 |
Ctrl + K | 剪切当前行 |
Ctrl + U | 粘贴剪切内容 |
Ctrl + W | 搜索文本 |
Ctrl + G | 查看帮助菜单 |
Alt + 6 | 复制当前行(需先标记内容) |
1.4 优点
界面底部直接显示快捷键,无需记忆复杂命令。
2 功能强大的 Vim
2.1 适用场景
编程、批量编辑、复杂文本处理。
2.2 安装命令
- 工具安装
# Debian/Ubuntu
sudo apt install vim
# CentOS/RHEL
sudo yum install vim-enhanced
大多数系统已预装,未安装时,如上命令安装
- 初识 Vim
如下是 vim 的编辑界面
2.3 模式说明
- 普通模式(默认):移动光标、执行命令
- 编辑模式(按 i):编辑文本
- 可视模式(按 v):选择文本块(块操作)
- 命令行模式(按 :):执行保存、退出等操作
2.4 常用命令
由于 vim 非常强大,可区分不同的使用模式,所以下面按照不同的模式下的可操作命令进行分类介绍
2.4.1 普通模式
- 模式介绍
当你 vim filename 编辑一个文件时,一进入该文件就是普通模式了。普通模式下,你可以做的操作有,上下移动光标、删除某个字符、删除某行、复制、粘贴一行或者多行。
- 移动光标
键盘按键 | 光标动作 |
---|---|
上下左右方向键 | 上下左右移动光标 |
数字0或者Shift+6 | 移动到本行行首 |
Shift+ 4 | 移动到本行行尾 |
gg | 移动到文件首行 |
G | 移动到文件尾行 |
nG(n是任意数字) | 移动到第 n 行 |
Ctrl+f或PageDown | 屏幕向后移动一页 |
Ctrl+ b或PageUp | 屏幕向前移动一页 |
- 可执行命令
# 删除动作
dd # 删除剪切光标所在行
ndd # 删除剪切以当前行开始的n行
dw # 从光标当前的位置开始删除,直到删到单词最后
ndw # 删除以当前字符开始的n个单词
daw # 删除光标所在的一个单词(delete a word缩写)
d$ # 删除以当前字符开始到行尾的所有字符
D # 删除以当前字符开始到行尾的所有字符,同 d$
d) # 删除到下一句的开始
d} # 删除到下一段的开始
d回车 # 删除2行
x,X # x表示向后删除一个字符,X表示向前删除一个字符
nx # 向后删除n个字符
# 复制剪切粘贴动作
yy # 复制光标所在行
nyy # 从光标所在行开始,向下复制n行
p # 从光标所在行开始,向下粘贴已经复制或者粘贴的内容
P(大写) # 从光标所在行开始,向上粘贴已经复制或者粘贴的内容
v # 按v后移动光标会选中指定字符,然后可以实现复制,粘贴等操作(可视模式)
# 还原回退
u # 还原上一步操作(最多回复50次)
Ctrl+r # 与u操作相反
2.4.2 编辑模式
- 模式介绍
普通模式下,是不可以编辑文本内容的,要编辑文本内容,需要从普通模式切换到编辑模式。具体操作,只需按一个键即可(i, I, a, A, o, O, r, R),进入编辑模式后,屏幕的最下一行出现“INSERT或REPLACE”的字样(如下图),就可以自由编辑文本了。从编辑模式回到普通模式只需要按键盘左上方的ESC键即可。
- 切换说明
a # 在光表后插入 (append after cursor)
A # 在一行的结尾插入 (append at end of the line)
i # 在光标前插入 (insert before cursor)
I # 在第一个非空白字符前插入 (insert before first non-blank)
o # 光标下面插入一个新行 (open line below)
O # 光标上面插入一个新行 (open line above)
J # 将下一行提到这行来 (join line)
r # 替换个字符 (replace characters)
R # 替换多个字符 (replace mode – continue replace)
gr # 不影响格局布置的替换 (replace without affecting layout)
c # 跟d键一样,但是删除后进入输入模式 (same as “d” but after delete, in insert mode)
S # 删除一行(好像dd一样),删除后进入输入模式 (same as “dd” but after delete, in insert mode)
s # 删除字符,跟(d)一样,但是删除后进入输入模式 (same as “d” but after delete, in insert mode)
s4s # 会删除4个字符,进入输入模式 (delete 4 char and put in insert mode)
~ # 更改大小写,大变小,小变大 (change case upper-> lower or lower->upper)
gu # 变成小写 (change to lower case)
# 例如 guG 会把光标当前到文件结尾全部变成小写 (change lower case all the way to the end)
gU # 变成大写 (change to upper case)
# 例如 gUG 会把光标当前到文件结尾全部变成大写 (change upper case all the way to the end)
2.4.3 可视模式
- 模式介绍
Vim 的可视模式提供字符级、行级、块级三种选区方式,适用于不同编辑场景
- 字符可视模式
- 按
v
进入,可逐字符选中文本- 适用场景:精确选择单词或段落
- 行可视模式
- 按
V
进入,自动选中整行内容- 适用场景:批量注释、删除多行代码
- 块可视模式
- 按 Ctrl + V 进入,选区呈矩形块状
- 适用场景:在多行相同位置插入相同字符(如批量添加引号)
- 进入方式
v # 进入字符可视模式
V # 进入行可视模式
ctrl+v # 进入块可视模式
2.4.4 命令行模式
- 模式介绍
普通模式下,输入 ”:” 或者 “/” 即可进入命令模式。在该模式下,用户可以搜索某个字符或者字符串,也可以保存、替换、退出、显示行号等等。
- 可执行命令
# 设置行号
set number # 开启行号展示
set nu # 开启行号展示
set nonu # 关闭行号展示
# 保存与退出
:w # 保存文件
:w! # 强制保存
:q # 退出文件
:q! # 强制退出
:e filename # 打开一个文件名为filename的文件
:e! filename # 强制打开一个文件,所有未保存的东西会丢失
:saveas filename # 文件另存为 filename
# 多行复制移动
:1,3 copy 4 # 复制1~3行内容放到第4行(复制前)后面
:1,3 co 4 # 复制1~3行内容放到第4行(复制前)后面
:1,3 move 4 # 移动1~3行内容放到第4行(移动前)后面
:1,3 m 4 # 移动1~3行内容放到第4行(移动前)后面,效果等同于在原来第4、5行之间插入1~3行内容
# 标记法-复制
1、光标移动到起始行,输入ma
2、光标移动到结束行,输入mb
3、光标移动到粘贴行,输入mc
4、然后输入:'a,'b, co 'c 把co换成m就是剪切
# 搜索文本 格式:/pattern
/ # 向下搜索 (search forward)
? # 向上搜索 (search back) # 可以用 /abc 或 ?abc的方式向上,向下搜索abc
# 搜索常用举例
/a* # 搜索有到 a aa aaa
/\(ab\)* # 搜索如 ab abab ababab
/ab\+ # 搜索如 ab abb abbb
/folers\= # 搜索如 folder folders
/ab\{3,5} # 搜索 abbb abbbb abbbbb
/ab\{-1,3} # 会在abbb中搜到ab
/a.\{-}b # 这个会在axbxb中搜到axb (match ‘axb’ in ‘axbxb’)
/a.*b # 搜索任何a开头后面有b的
/foo\|bar # 搜索foo或者bar,就是同时搜索2个词
/one\|two\|three # 搜索3个词
/\(foo\|bar\)\+ # 搜索foo, foobar, foofoo, barfoobar等等
/end\(if\|while\|for\) # 搜索endif, endwhile endfor
- 替换操作
1、命令完整格式::[range]s/from/to/[flags]
s/from/to/ # 把from指定的字符串替换成to指定的字符串,from可以是正则表达式
- [range]
不写 : 默认为光标所在的行
. : 光标所在的行
1 : 第一行
$ : 最后一行
33 : 第33行
'a : 标记a所在的行(之前要使用ma做过标记)
.+1 : 当前光标所在行的下面一行
$-1 : 倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)
22,33 : 第22~33行
1,$ : 第1行 到 最后一行
1,. : 第1行 到 当前行
.,$ : 当前行 到 最后一行
'a,'b : 标记a所在的行到标记b所在的行
% : 所有行(与 1,$等价)
?chapter? : 从当前位置向上搜索,找到的第一个chapter所在的行(其中chapter可以是任何字符串或者正则表达式)
/chapter/ : 从当前位置向下搜索,找到的第一个chapter所在的行。(其中chapter可以是任何字符串或者正则表达式)
> 注意:上面的所有用于range的表示方法都可以通过 +、- 操作来设置相对偏移量
- [flags]
无 : 只对指定范围内的第一个匹配项进行替换
g : 对指定范围内的所有匹配项进行替换
c : 在替换前请求用户确认
e : 忽略执行过程中的错误
> 注意:flags可以组合使用,比如 gc 表示对指定范围内的所有匹配项进行替换,并且在每一次替换之前都会请用户确认
2、使用举例
:%s/abc/def/ # 替换abc到def
:%s/abc/def/c # 替换abc到def,会每次都问你确定
:1,5s/abc/def/g # 只替换第 1~5 行之间的abc到def
:54s/abc/def/ # 只替换第54行的abc到def
:.s/from/to/g # 在当前行进行替换操作
:33s/from/to/g # 在第33行进行替换操作
:$s/from/to/g # 在最后一行进行替换操作
:1,$s/from/to/g # 对第一行到最后一行的内容进行替换(即全部文本)
:1,.s/from/to/g # 对第一行到当前行的内容进行替换
:.,$s/from/to/g # 对当前行到最后一行的内容进行替换
:%s/from/to/g # 对所有行的内容进行替换
:'a,'bs/from/to/g # 对标记a和b之间的行(含a和b所在的行)进行替换。其中a和b是之前用m命令所做的标记
3 参考文献
文献1|文献2|文献3
写在最后
文章整体介绍了 linux 下最常用的编辑命令工具,从简单易用的 nano 到功能强大的 vim ,希望可以帮助读者对命令行文本编辑器有个整体认识和了解。如有任何问题,也请评论指正,如有帮助,也欢迎点赞和收藏。我们共同努力,一起进步!