Linux工作台文件操作命令全流程解析(高级篇之vim和nano精讲)

#王者杯·14天创作挑战营·第1期#


写在前面

作为运维或者研发,日常工作经常会对一些文件进行编辑处理,无论是修改配置文件、编写脚本还是处理日志,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 的工作编辑界面很简单,底端还有完整的操作提示,很友好。
    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 的编辑界面
    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键即可。
vim编辑模式

  • 切换说明
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 ,希望可以帮助读者对命令行文本编辑器有个整体认识和了解。如有任何问题,也请评论指正,如有帮助,也欢迎点赞和收藏。我们共同努力,一起进步!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jogging-Snail

谢谢,鼓励,我会再接再厉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值