第三章 文本编辑器 更新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++全局改变量名/函数名必备)。
③配置选项
配置选项在命令行模式中使用
:开头的命令进行设置
- 显示配置
:set nu:显示行号(vi中唯一的可视化增强配置,调试找行号必备):set nonu:关闭行号(默认关闭):set wrap:开启自动换行(默认开启,一行过长时折行显示):set nowrap:关闭自动换行(查看长行文本如代码/配置文件时用)
- 编辑配置
:set autoindent:基础自动缩进(换行时继承上一行的缩进,无vim的smartindent智能缩进):set tabstop=4:设置Tab键宽度为4个字符(默认8,改4更符合编辑习惯):set backspace=2:允许删除任意字符(vi默认限制backspace,改后可正常删除)
- 搜索优化配置
: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++编辑的高频场景,不用记复杂命令:
- 按文件类型注释:普通模式下按
gcc(连续按3个c),快速注释/取消注释当前行,批量注释选行后按gc即可(需要开启filetype plugin,或安装vim-commentary/tcomment等插件,纯净Vim默认没有这个功能); - 快速跳转到函数/变量定义:普通模式下将光标移到C++函数/变量名上,按
gd(goto definition),快速跳转到定义处(Vi无,编辑多文件C++项目必备); - 增强分屏:普通模式下
:sp 文件名(水平分屏)、:vsp 文件名(垂直分屏),用Ctrl+h/j/k/l快速切换(上面配置的快捷键),适合同时编辑C++头文件(.h)和源文件(.cpp); - 自动补全括号:输入
{、(、[时会自动补全对应的}、)、],减少手敲和漏括号(需要安装auto-pairs等插件,纯净Vim默认不支持); - 行号快速计算:命令行模式下
:行号1+行号2(如:20+30),快速跳转到第50行,C++调试时计算行号用(Vi无)。