Linux04--Vim文本编辑器

1 vi/vim编辑器介绍

# vi/vim编辑器:用来修改文件

vi  : 同记事本一样
vim : vim是vi的升级版 (如:颜色)


# 格式: vim [选项(非必须)] [被修改的文件的路径]

# 选项:
    -r : 继续输入  # 可以把上次退出时没有保存的内容读出来,继续编写

1.1 vi/vim的三种模式

# 命令模式:进入修改文件的第一个模式,主要功能都是使用各种快捷键 
# 末行模式:对文本进行处理,例如:替换  
# 编辑模式:修改文件内容

1.2 三种模式的关系

1.3 vi/vim编辑器的原理

1.vi xxx.txt      # 检查.xxx.txt.swp是否存在
2.读取xxx.txt的内容  
3.会自动创建一个名为.xxx.txt.swp的隐藏临时文件  
4.修改文件         # 修改.xxx.txt.swp文件 
5.保存文件         # .xxx.txt.swp文件存入xxx.txt中  
6.退出编辑         # 删除.xxx.txt.swp文件

==============Vim非正常退出时===============  
1 模拟故障:
  编辑文件的时候断开连接即可(断网或断电),重新连接服务器,再次进行编辑文件

2 故障报错:
  Found a swap file by the name ".vim.log.swp" 
  Swap file ".vim.log.swp" already exists

3 故障解决:
  删除临时文件 或者 先恢复内容再删除  使用vim -r a.txt -r选项进行恢复

2 vi/vim编辑指令

所有模式适用:上下左右键:控制光标的位置

2.1 命令模式

: (shift + :)  进入末行模式

i :进入编辑模式  # 在光标之前输入  insert的缩写
a :进入编辑模式  # 在光标之后输入  append的缩写
o :进入编辑模式  # 在光标所在位置另起一行输入

esc : 退出末行/编辑模式,回到命令模式


gg :跳转到首行 行首
G  :跳转到末行 行首 
H  :移动到屏幕的开头
L  :移动到屏幕的结尾
M  :移动到屏幕的中间

0  :从光标所在位置跳转到当前行 行首  
$  :从光标所在位置跳转到当前行 行尾 

u  :撤销上一步  # 类似于windows中的ctrl+z

dd :删除当前行    
ndd:在光标所在位置向下删除n行  # n 是具体的行数
D  :从当前行的光标所在位置删除到行末   

yy :复制光标所在行  
nyy:在光标所在位置向下复制n行  # n 是具体的行数

p  :粘贴到光标的下一行      # 小写
P  :粘贴到光标的上一行      # 大写

x  :删除光标当前字符,向后删除      # 小写  与del键一样
X  :删除光标当前字符,向前删除      # 大写
 



# 查找内容:
    向下查找:/要查找的内容,按n下一个,按N上一个
    向上查找:?要查找的内容 

2.2 末行模式

### 1 保存退出
  :n  : 直接跳转到第n行  

  :w  : 保存  
  :q  : 退出编辑  
  :wq : 保存并退出  
  :x  : 保存并退出  

  :q! : 强制退出  # 不保存退出
    ! : 强制执行的意思  # 指令参数,必须跟在指令后面


### 2 查找替换
格式: :范围  s/old/new/选项         # 中间的分隔符是 /  # @ 都可以
      :作用开始的行号,作用结束的行号 s#[被修改的内容]#[修改的内容]#[g] 

  # 范围中的符号
    $  表示最后一行
    %  表示全文、代表的是文本所有行

  # 选项中的符号
    g  表示全局   # 因为默认的查找替换,是只查找到每行的第一个,若同行后面还有,就不会替换,则需要最后加上 g
    i  表示忽略大小写   # 可与 g 一起使用

  # 被修改内容中的符号    ==> 正则表达式
    ^  表示以什么开头
    $  表示以什么结尾


  # eg:将文件中的man替换为MAN 
      :0,410 s#man#MAN#g
      :0,$ s#man#MAN#g
      :% s#man#MAN#g

      :1,5 s/Note/yyy/    # 从1-5行的第一个 Note 替换为yyy   
      :5,$ s/Note/yyy/    # $表示最后一行
      :4,9 s/^#//         # 4-9行的 以#开头的替换为空

      :% s#/dev/sda#/var/ccc#g  # 把全文 /dev/sda 替换成 /var/ccc

      :,8 s/to/xxx/       # 从当前行到第8行


### 3 读入文件/写文件
      :w /aaa.txt          # 相当于把当前文件另存为/aaa.txt  
      :1,3 w /2.txt        # 把1-3行 复制写入到 /2.txt中
      :1 w! /root/ccc.txt  # 把1 强制复制写入到 //root/ccc.txt
                             如果目标文件已经存在则需要加!号

      :r /etc/hosts        # 将/etc/hosts文件的内容,复制读取到 当前光标的下一行


### 4 设置环境

  # 临时设置
    :set nu   : 显示行号  # nu number的缩写
    :set nonu : 取消行号

    :set ic   : 不区分大小写  # 命令模式下的 /字符串 查找 以及 编辑模式的 查找替换,就不会区分大小写了
    :set noic : 区分大小写  # 默认

    :set ai   : 自动缩进
    :set list : 显示不可见的字符  eg 换行符


  # 永久设置环境:  修改vim的配置
    /etc/vimrc     影响所有系统用户
    ~/.vimrc       影响某一个用户

    # vim ~/.vimrc   # 在家目录下新增一个文件,输入下述内容
      set ic
      set nu

2.3 编辑模式

ctrl + v : 进入可视化编辑模式,允许多行批量操作

# 案例:
# 1.Vim同时注释多行
    1.Ctrl + v进入块选择模式
    2.向上或向下移动光标选择多行
    3.移动光标到行的起始位置
    4.然后按大写的 I 进入行首插入模式
    5.插入注释符
    6.按Esc回到命令模式
    
# 2.Vim同时删除多行注释
    1.Ctrl + v 进入块选择模式
    2.向上或向下移动光标,选择要删除的注释符号
    3.按d键删除

2.4 编辑多个文件与文件内容对比

### 1 同时编辑多个文件
vim -o 文件1 文件2   # 垂直排列
vim -O 文件1 文件2   # 水平排列
  使用 ctrl + ww 切换
​

### 2 文件内容对比
# 相同文件之间差异对比,通常用于对比修改前后的差异。

vimdiff   # 以vim方式打开两个文件对比,高亮显示不同的内容 
  # eg: 
    vimdiff a.txt  b.txt  # 也可进入到 编辑中  a i o 以及 ctrl + ww 切换


diff      # 文件对比
  # eg: 
    diff a.txt  b.txt    # 命令行中 显示两个文件的不同

[root@hecs-147737 ~]$ diff a.txt b.txt 
1c1      # 第一行的不同
< 1111   # 左边文件的内容
---
> 111    # 右边文件的内容

3,4c3,4  # 第三、四行的不同
< 333333
< 
---
> 3333333
> 444444444444444

3 安装vim编辑器

1.进入/etc/yum.repos.d目录
    cd /etc/yum.repos.d

2.删除所有的文件
    rm -rf ./*

3.编辑CentOS-Base.repo
    vi CentOS-Base.repo

    [base]
    name="Hello World"
    baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/
    gpgcheck=0

4.安装
    yum install vim -y
    https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/
posted @   Edmond辉仔  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示