【linux】vim

🔥个人主页Quitecoder

🔥专栏linux笔记仓

目录

01.vim的基本概念

Vim是一款高度配置化的文本编辑器,用于创建和编辑任何类型的文本,包括程序代码。它是从"vi"文本编辑器演变而来,增加了一些新功能和改进,包括插件系统、语法高亮、代码折叠、更好的搜索功能等。Vim是一款自由和开源的软件,遵循Vim许可证(它是一种类似于GPL许可证的自由软件许可证)。

vim的三种模式(其实有好多模式,目前掌握这3种即可),分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

  • 正常/普通/命令模式(Normal mode)
    控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode
  • 插入模式(Insert mode)
    只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。
  • 末行模式(last line mode)
    文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入
bash 复制代码
:help vim-modes

02.基本操作

vim的基本操作:

  • 进入vim,在系统提示符号输入vim及文件名称后,就进入vim全屏幕编辑画面:
    • $ vim test.c
    • 不过有一点要特别注意,就是你进入vim之后,是处于[正常模式],你要切换到[插入模式]才能够输入文字。
  • [正常模式]切换至[插入模式]
    • 输入a
    • 输入i
    • 输入o
  • [插入模式]切换至[正常模式]
    • 目前处于[插入模式],就只能一直输入文字,如果发现输错了字,想用光标键往回移动,将该字删除,可以先按一下**「ESC」键**转到[正常模式]再删除文字。当然,也可以直接删除。
  • [正常模式]切换至[末行模式]
    • 「shift + ;」, 其实就是输入「:」
  • 退出vim及保存文件 ,在[正常模式]下,按一下「:」冒号键进入「Last line mode」,例如:
    • : w (保存当前文件)
    • : wq (输入「wq」,存盘并退出vim)
    • : q! (输入q!,不存盘强制退出vim)

03.正常模式命令集

  • 插入模式
    • 按「i」切换进入插入模式「insert mode」,按"i"进入插入模式后是从光标当前位置开始输入文件;
    • 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
    • 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
  • 从插入模式切换为命令模式
    • 按「ESC」键。
  • 移动光标
    • vim可以直接用键盘上的光标来上下左右移动,但正规的vim是用小写英文字母 「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格
    • 按「G」:移动到文章的最后
    • 按「 $ 」:移动到光标所在行的"行尾"
    • 按「^」:移动到光标所在行的"行首"
    • 按「w」:光标跳到下个字的开头
    • 按「e」:光标跳到下个字的字尾
    • 按「b」:光标回到上个字的开头
    • 按「#l」:光标移到该行的第#个位置,如:5l,56l
    • 按[gg]:进入到文本开始
    • 按[shift+g]:进入文本末端
    • 按[#shift+g]:进入第#行
    • 按「ctrl」+「b」:屏幕往"后"移动一页
    • 按「ctrl」+「f」:屏幕往"前"移动一页
    • 按「ctrl」+「u」:屏幕往"后"移动半页
    • 按「ctrl」+「d」:屏幕往"前"移动半页
  • 删除文字
    • 「x」:每按一次,删除光标所在位置的一个字符
    • 「#x」:例如,「6x」表示删除光标所在位置的"后面(包含自己在内)"6个字符
    • 「X」:大写的X,每按一次,删除光标所在位置的"前面"一个字符
    • 「#X」:例如,「20X」表示删除光标所在位置的"前面"20个字符
    • 「dd」:删除光标所在行
    • 「#dd」:从光标所在行开始删除#行
  • 复制
    • 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
    • 「#yw」:复制#个字到缓冲区
    • 「yy」:复制光标所在行到缓冲区
    • 「#yy」:例如,「6yy」表示拷贝从光标所在的该行"往下数"6行文字。
    • 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与"y"有关的复制命令都必须与"p"配合才能完成复制与粘贴功能。
  • 替换
    • 「r」:替换光标所在处的字符。
    • 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
  • 撤销上一次操作
    • 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次"u"可以执行多次回复。
    • 「ctrl + r」: 撤销的恢复
  • 更改
    • 「cw」:更改光标所在处的字到字尾处
    • 「c#w」:例如,「c3w」表示更改3个字
  • 跳至指定的行
    • 「ctrl」+「g」列出光标所在行的行号。
    • 「#G」:例如,「15G」,表示移动光标至文章的第15行行首

04.批量化注释与去注释

注释步骤:

  1. 先ctrl+v 进入VISUAL BLOCK模式

  2. 再通过j选择注释范围

  3. 再shift+i

  4. 再// 注释一行,按两次esc

去注释步骤:

  1. ctrl+v 进行区域选择
  2. 包含且仅包含被注释的位置
  3. d

05.sudo提权

普通用户一般不能使用sudo提权

我们需要做的就是在sudoers这个文件中进行配置

  1. 切换用户,打开这个sudoers文件
  2. 在100行左右加上我们的普通用户
  3. wq!保存退出

06.vim配置

在 Vim 中配置格式化选项主要涉及使用 Vim 的设置选项,这些选项可以在 Vim 的配置文件 ~/.vimrc 中设置,以确保每次启动 Vim 时都会自动应用它们。下面是一些常用的格式化设置选项:

  1. 自动缩进

    vim 复制代码
    set autoindent

    开启 autoindent 选项后,当你新开始一行时,该行的缩进将复制前一行的缩进。

  2. 智能缩进

    vim 复制代码
    set smartindent

    智能缩进是 autoindent 的增强版,它会根据当前的语言的语法自动调整新行的缩进。

  3. C 样式缩进

    vim 复制代码
    set cindent

    专门为 C 语言编写的代码提供更加智能的缩进策略。

  4. 缩进宽度

    vim 复制代码
    set tabstop=4
    set shiftwidth=4
    set expandtab

    tabstop 设置一个 <Tab> 字符的显示宽度。
    shiftwidth 设置每次缩进的级别的宽度。
    expandtab 选项会将 <Tab> 转换成 tabstop 选项指定数量的空格。

  5. 设置文件类型侦测

    vim 复制代码
    filetype on
    filetype indent on
    filetype plugin on

    这些命令开启文件类型检测,并加载文件类型特定的插件和缩进设置。

  6. 语法高亮

    vim 复制代码
    syntax on

    显示语法高亮。

  7. 格式化时断行

    vim 复制代码
    set textwidth=80

    如果一行的长度超过80个字符,Vim会在输入时自动换行。

  8. 自动格式化

    vim 复制代码
    set formatoptions+=c
    set formatoptions+=r
    set formatoptions+=o

    这些选项设置了Vim在插入模式中自动格式化文本的方式。对于 formatoptions

    • c 自动将注释的样式延续到新的一行。
    • r 在按下回车键时自动复制上一行的注释样式。
    • o 在新行使用 Oo 命令时自动复制注释。
  9. 保存前自动格式化

    vim 复制代码
    au BufWritePre * :normal gg=G

    这个自动命令会在每次写入文件之前对整个文件内容进行自动格式化。

要激活这些配置,首先打开你的 ~/.vimrc 文件:

bash 复制代码
vim ~/.vimrc

然后添加上述配置,并根据个人习惯调整。保存并关闭 vim 后,新的配置将会生效。可以通过重启 Vim 或执行 :source ~/.vimrc 命令立即使更改生效。

Vim 社区还提供了大量插件来辅助格式化特定的编程语言,如prettier(适用于多种语言)、clang-format(适用于 C 和 C++)等,你可以根据需要安装和配置这些插件以实现更高级的格式化功能。

相关推荐
饮啦冰美式2 分钟前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp3 分钟前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu
Huaqiwill4 分钟前
Ubuntun搭建并行计算环境
linux·云计算
wclass-zhengge7 分钟前
Netty篇(入门编程)
java·linux·服务器
Lign173148 分钟前
ubuntu unrar解压 中文文件名异常问题解决
linux·运维·ubuntu
vip4511 小时前
Linux 经典面试八股文
linux
大霞上仙1 小时前
Ubuntu系统电脑没有WiFi适配器
linux·运维·电脑
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
为什么这亚子1 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
布值倒区什么name2 小时前
bug日常记录responded with a status of 413 (Request Entity Too Large)
运维·服务器·bug