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

news2025/5/12 5:17:53

全文目录

    • 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 的工作编辑界面很简单,底端还有完整的操作提示,很友好。
    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 ,希望可以帮助读者对命令行文本编辑器有个整体认识和了解。如有任何问题,也请评论指正,如有帮助,也欢迎点赞和收藏。我们共同努力,一起进步!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2373687.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据产品销售数据分析:基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现

文章目录 大数据产品销售数据分析:基于Python机器学习产品销售数据爬虫可视化分析预测系统设计与实现一、项目概述二、项目说明三、研究意义四、系统总体架构设计总体框架技术架构数据可视化模块设计图后台管理模块设计数据库设计 五、开发技术介绍Flask框架Python爬…

VS2022 Qt配置Qxlsx

目录 1、下载QXlsx,并解压文件夹 ​编辑2、打开VS2022配置QXlsx 3、VS配置Qxslx库 方法一:常规方法 方法二:直接使用源码 方法三:将QXlsx添加到Qt安装目录(暂时尝试未成功) 1、下载QXlsx,…

OSPF案例

拓扑图: 要求: 1,R5为ISP,其上只能配置IP地址;R4作为企业边界路由器, 出口公网地址需要通过PPP协议获取,并进行chap认证 2,整个OSPF环境IP基于172.16.0.0/16划分;…

《用MATLAB玩转游戏开发》贪吃蛇的百变玩法:从命令行到AI对战

《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-🐍 贪吃蛇的百变玩法:从命令行到AI对战 🎮 欢迎来到这篇MATLAB贪吃蛇编程全攻略!本文将带你从零开始,一步步…

【数据结构与算法】图的基本概念与遍历

目录 一、图的基本概念 1.1 图的基本组成 1.2 图的分类 1.3 顶点的度数 1.4 路径与回路 1.5 子图与特殊图 二. 图的存储结构 2.1 邻接矩阵 2.2 邻接表 三、深度优先遍历 3.1 原理 3.2 实现步骤 3.3 代码实现 四、广度优先遍历 4.1 原理 4.2 实现步骤 4.3 代码…

Linux云服务器配置git开发环境

文章目录 1. 安装 git2. git clone3. git add .4. git commit -m 提交记录5. git push🍑 异常原因🍑 解决办法 6. git pull7. git log8. git rm9. git mv10. git status 1. 安装 git sudo yum install git -y2. git clone 此命令的作用是从远程仓库把代…

手机浏览器IP归属地查询全指南:方法与常见问题解答

在当今数字化时代,手机浏览器已成为人们日常生活中不可或缺的工具之一。然而,在使用手机浏览器的过程中,有时我们需要了解当前网络连接的IP归属地信息,那么,手机浏览器IP归属地怎么查看呢?本文将详细介绍几…

Microsoft Azure DevOps针对Angular项目创建build版本的yaml

Azure DevOps针对Angular项目创建build版本的yaml,并通过变量控制相应job的执行与否。 注意事项:代码前面的空格是通过Tab控制的而不是通过Space控制的。 yaml文件中包含一下内容: 1. 自动触发build 通过指定code branch使提交到此代码库的…

Linux系统管理与编程16:PXE自动化安装部署centos7.9操作系统

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 0.准备 1)防火墙和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/selinux/config (很不好的…

如何通过ABAP获取SAP生产订单的目标成本

SAP存储生产订单成本的主要底表包括: COBK: CO凭证表头COEP: CO凭证行项目COSS: 来自CO内部的汇总数据COSP: 来自CO外部部的汇总数据 先说结论:SAP 对生产订单的目标成本是没有保存到底表的。那么如何通过代码的方式获取呢? K_KKB_KKBCS_O…

【leetcode100】最长重复子数组

1、题目描述 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1: 输入:nums1 [1,2,3,2,1], nums2 [3,2,1,4,7] 输出:3 解释:长度最长的公共子数组是 [3,2,1] 。示例 2&…

基于Django框架的股票分红数据爬虫和展示系统

项目截图 一、项目简介 本项目是一个基于 Django 框架的股票分红数据爬虫和展示系统。它可以从东方财富网站爬取股票分红数据,并将数据存储到 Django 数据库中,同时提供数据查询、导出和图表展示功能。该系统为用户提供了一个方便的平台,用于…

QT高级(1)QTableView自定义委托集合,一个类实现若干委托

自定义委托集合 1同系列文章2 功能3 源码 1同系列文章 QT中级(1)QTableView自定义委托(一)实现QSpinBox、QDoubleSpinBox委托 QT中级(2)QTableView自定义委托(二)实现QProgressBar委…

小芯片大战略:Chiplet技术如何重构全球半导体竞争格局?

在科技飞速发展的今天,半导体行业作为信息技术的核心领域之一,其发展速度和创新水平对全球经济的发展具有举足轻重的影响。然而,随着芯片制造工艺的不断进步,传统的单片集成方式逐渐遇到了技术瓶颈,如摩尔定律逐渐逼近…

普通IT的股票交易成长史--股价起伏的真相-缺口(2)

声明:本文章的内容只是自己学习的总结,不构成投资建议。价格行为理论学习可参考简介中的几位,感谢他们的无私奉献。 送给自己的话: 仓位就是生命,绝对不能满仓!!!!&…

MindSpore框架学习项目-ResNet药物分类-模型优化

目录 5.模型优化 5.1模型优化 6.结语 参考内容: 昇思MindSpore | 全场景AI框架 | 昇思MindSpore社区官网 华为自研的国产AI框架,训推一体,支持动态图、静态图,全场景适用,有着不错的生态 本项目可以在华为云modelar…

Kubernetes(k8s)学习笔记(八)--KubeSphere定制化安装

1执行下面的命令修改上一篇中yaml文件来实现定制化安装devops kubectl edit cm -n kubesphere-system ks-installer 主要是将devops几个配置由False改为True 然后使用下面的命令查看安装日志 kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l …

养生:为健康生活筑牢根基

养生并非遥不可及的目标,而是贯穿于日常生活的点滴之中。从饮食、运动到心态调节,每一个环节都对我们的健康有着重要意义。以下为你详细介绍养生的实用策略,助力你开启健康生活模式。 饮食养生:科学搭配,滋养生命 合…

Linux510 ssh服务 ssh连接

arning: Permanently added ‘11.1.1.100’ (ECDSA) to the list of known hosts. rooot11.1.1.100’s password: Permission denied, please try again. rooot11.1.1.100’s password: Permission denied, please try again 还没生效 登不上了 失效了 sshcaozx26成功登录 …

关键点检测--使用YOLOv8对Leeds Sports Pose(LSP)关键点检测

目录 1. Leeds Sports Pose数据集下载2. 数据集处理2.1 获取标签2.2 将图像文件和标签文件处理成YOLO能使用的格式 3. 用YOLOv8进行训练3.1 训练3.2 预测 1. Leeds Sports Pose数据集下载 从kaggle官网下载这个数据集,地址为link,下载好的数据集文件如下…