Skip to content

第三章 文本编辑器 更新ing ​

第一部分 vi与vim ​

一、vi (Visual Editor) ​

Unix/Linux 的原生文本编辑器

1、三种核心模式 ​

模式进入方式核心作用
普通模式启动默认进入/任意模式按Esc移动光标、删除、复制、粘贴、撤销
插入模式普通模式下按i/a/o写入代码/文本
命令行模式普通模式下按:///?保存退出、查找替换、行操作

2、插入模式 ​

普通模式下按以下按键进入插入模式进行操作:

  • i:光标前插入(insert)
  • I:直接跳到当前行首插入(insert)
  • a:光标后插入(append)
  • A:直接跳到当前行末插入(append)
  • o:光标下一行新建空白行并插入,新增代码行时用
  • O:光标上一行新建空白行并插入,适合在代码上方加注释

3、命令行模式 ​

①退出与保存 ​

命令行模式下输入以下内容,按Enter执行

  • :q:退出(quit),文件未修改时可用
  • :w:保存文件(write),不退出
  • :w 文件名:另存为新文件,不退出
  • :wq:保存并退出
  • :w!:强制保存
  • :q!:强制退出,放弃所有修改
  • :e 文件名:在当前窗口打开另一个文件
②查找替换 ​
  • 快速查找:/关键词(向下查找,如/main找主函数)、?关键词(向上查找),按n下一个匹配、N上一个匹配;
  • 单行替换::s/旧内容/新内容/g(如:s/int/long/g,当前行全局替换,g=global);
  • 批量替换::起始行,结束行s/旧内容/新内容/g(如:1,50s/printf/cout/g,1-50行替换,C++从C语法迁移时用);
  • 全文件替换::%s/旧内容/新内容/g(%代表所有行,C++全局改变量名/函数名必备)。
③配置选项 ​

配置选项在命令行模式中使用 : 开头的命令进行设置

  1. 显示配置
    • :set nu:显示行号(vi中唯一的可视化增强配置,调试找行号必备)
    • :set nonu:关闭行号(默认关闭)
    • :set wrap:开启自动换行(默认开启,一行过长时折行显示)
    • :set nowrap:关闭自动换行(查看长行文本如代码/配置文件时用)
  2. 编辑配置
    • :set autoindent:基础自动缩进(换行时继承上一行的缩进,无vim的smartindent智能缩进)
    • :set tabstop=4:设置Tab键宽度为4个字符(默认8,改4更符合编辑习惯)
    • :set backspace=2:允许删除任意字符(vi默认限制backspace,改后可正常删除)
  3. 搜索优化配置
    • :set hlsearch:高亮显示搜索匹配结果(/关键词后,所有匹配项标亮)
    • :set nohlsearch:关闭搜索高亮(输入后立即生效,清除现有高亮)
    • :set ignorecase:搜索时忽略大小写(如搜test和TEST都能匹配)
    • :set noignorecase:关闭忽略大小写(默认)

4、普通模式 ​

①光标移动 ​

普通模式下,按h/j/k/l对应左/下/上/右,练熟后比方向键快,配合数字可批量移动:

  • 单行移动:w(下一个单词首)、b(上一个单词首)、$(行尾)、^(行首,非空字符);
  • 全局移动:gg(文件开头)、G(文件结尾)、数字G(指定行,如20G到第20行,C++调试找行号必备);
  • 翻页:Ctrl+f(下翻一页,forward)、Ctrl+b(上翻一页,backward),编辑大的C++源文件/头文件用。
②编辑操作 ​
  • 删除:dd(删除整行)、x(删除光标所在字符)、dw(删除一个单词);
  • 复制:yy(复制整行)、yw(复制一个单词);
  • 粘贴:p(粘贴到光标下一行/后方,paste)、P(大写,粘贴到上一行/前方);
  • 撤销/重做:u(撤销上一步操作,undo)、Ctrl+r(重做,redo,撤销错了用);
  • 批量操作示例:3dd(删除3行)、5yy(复制5行),C++批量重构代码时超高效。
③批量行操作 ​

普通模式下按v进入字符可视模式,按V进入行可视模式,选完后可执行删除/复制/注释:

  • 批量注释C++代码:行可视模式选行 → 按: → 输入norm // → 回车(快速给多行加//注释);
  • 批量取消注释:行可视模式选行 → 按d(删除//)或:s/\/\///g(替换//为空)。

二、vim(Vi IMproved) ​

vim兼容vi的所有操作,是vi的超集,在vi的基础上增加了大量提升效率的功能

1. vim 必开的基础增强配置(写入~/.vimrc,永久生效) ​

Vi的临时设置(如:set nu)退出即失效,Vim通过配置文件~/.vimrc(没有就新建:vi ~/.vimrc)实现持久化配置,下面是C++开发必配的基础配置,全部是Vi没有的增强功能,复制即可用:

vim
" ============== Vim专属增强配置(C++开发必备) ==============
set nu                  " 永久显示行号(Vi临时,Vim持久,GDB断点必备)
syntax on               " 开启语法高亮(Vi无,C++关键字/类/注释着色,一眼区分)
filetype indent on      " 按文件类型智能缩进(注意filetype是独立命令,不能写成set)
set smartindent         " 智能缩进(C++写if/for/函数时,自动缩进下一行)
set autoindent          " 自动缩进(换行时继承上一行缩进,C++代码整洁)

" ============== 通用基础配置(Vi/Vim都支持,持久化) ==============
set tabstop=4           " tab占4个空格(C++开发规范)
set shiftwidth=4        " 缩进步长4个空格(和tab一致)
set expandtab           " tab自动转为空格(避免不同编辑器tab显示不一致,C++工程化必备)
set incsearch           " 实时查找(Vim增强,输入/关键词时实时高亮匹配,Vi需输完才查找)
set hlsearch            " 高亮查找结果(Vi无,C++找函数/变量时高亮所有匹配)
set cursorline          " 高亮当前行(Vi无,C++编辑大文件时快速定位光标)
set encoding=utf-8      " 编码为UTF-8(避免C++代码中文注释乱码)
set mouse=a             " 开启鼠标(可选,前期练快捷键可关,后期分屏时方便点选)

" ============== 快捷键映射(自定义,贴合C++开发) ==============
nnoremap <C-s> :w<CR>   " 普通模式Ctrl+S保存(贴合Windows习惯,避免忘:w)
nnoremap <C-q> :q<CR>   " 普通模式Ctrl+Q退出(可选)
nnoremap <C-h> <C-w>h   " 分屏左切换(Vim增强,Vi分屏切换麻烦)
nnoremap <C-j> <C-w>j   " 分屏下切换
nnoremap <C-k> <C-w>k   " 分屏上切换
nnoremap <C-l> <C-w>l   " 分屏右切换

Vim配置文件的注释符是双引号",不是#;写成#会报E518: Unknown option导致配置全部失效。

生效方式:配置后执行source ~/.vimrc,重启Vim即可,所有设置永久生效。

2. Vim 专属增强操作(C++开发高频,Vi无) ​

在Vi的基础上,Vim增加了这些一键操作,覆盖C++编辑的高频场景,不用记复杂命令:

  1. 按文件类型注释:普通模式下按gcc(连续按3个c),快速注释/取消注释当前行,批量注释选行后按gc即可(需要开启filetype plugin,或安装vim-commentary/tcomment等插件,纯净Vim默认没有这个功能);
  2. 快速跳转到函数/变量定义:普通模式下将光标移到C++函数/变量名上,按gd(goto definition),快速跳转到定义处(Vi无,编辑多文件C++项目必备);
  3. 增强分屏:普通模式下:sp 文件名(水平分屏)、:vsp 文件名(垂直分屏),用Ctrl+h/j/k/l快速切换(上面配置的快捷键),适合同时编辑C++头文件(.h)和源文件(.cpp);
  4. 自动补全括号:输入{、(、[时会自动补全对应的}、)、],减少手敲和漏括号(需要安装auto-pairs等插件,纯净Vim默认不支持);
  5. 行号快速计算:命令行模式下:行号1+行号2(如:20+30),快速跳转到第50行,C++调试时计算行号用(Vi无)。