Vi–终端中的编辑器vi 简介打开和新建文件三种工作模式常用命令分屏命令常用命令速查图vi 简介学习 vi 的目的在工作中要对 服务器 上的文件进行 简单 的修改可以使用ssh远程登录到服务器上并且使用vi进行快速的编辑即可常见需要修改的文件包括源程序配置文件例如ssh的配置文件~/.ssh/config在没有图形界面的环境下要编辑文件vi 是最佳选择每一个要使用 Linux 的程序员都应该或多或少的学习一些 vi 的常用命令Vi和Vim在很多 Linux 发行版中直接把 vi 做成 vim 的软连接vivi 是 Visual interface 的简称是 Linux 中 最经典 的文本编辑器vi 的核心设计思想 ——让程序员的手指始终保持在键盘的核心区域就能完成所有的编辑操作vi 的特点没有图形界面 的 功能强大 的编辑器只能是编辑 文本内容不能对字体、段落进行排版不支持鼠标操作没有菜单只有命令vi 编辑器在 系统管理、服务器管理 编辑文件时其功能永远不是图形界面的编辑器能比拟的vimvim vi improvedvim是从 vi 发展出来的一个文本编辑器支持 代码补全、编译 及 错误跳转 等方便编程的功能特别丰富在程序员中被广泛使用被称为编辑器之神查询软连接命令知道在很多 Linux 发行版中直接把 vi 做成 vim 的软连接# 查找 vi 的运行文件 $ which vi $ ls -l /usr/bin/vi $ ls -l /etc/alternatives/vi $ ls -l /usr/bin/vim.basic # 查找 vim 的运行文件 $ which vim $ ls -l /usr/bin/vim $ ls -l /etc/alternatives/vim $ ls -l /usr/bin/vim.basic打开和新建文件在终端中输入 vi 在后面跟上文件名 即可$ vi 文件名如果文件已经存在会直接打开该文件如果文件不存在会新建一个文件打开文件并且定位行在日常工作中有可能会遇到打开一个文件并定位到指定行 的情况例如在开发时知道某一行代码有错误可以 **快速定位 **到出错代码的位置这个时候可以使用以下命令打开文件$ vi 文件名 行数提示如果只带上 而不指定行号会直接定位到文件末尾异常处理如果vi异常退出在磁盘上可能会保存有交换文件下次再使用vi编辑该文件时会看到以下屏幕信息按下字母d可以 删除交换文件 即可提示按下键盘时注意关闭输入法三种工作模式vi 有三种基本工作模式命令模式打开文件首先进入命令模式是使用 vi 的入口通过 命令 对文件进行常规的编辑操作例如定位、翻页、复制、粘贴、删除……在其他图形编辑器下通过 快捷键 或者 鼠标 实现的操作都在命令模式下实现末行模式—— 执行保存、退出等操作要退出vi返回到控制台需要在末行模式下输入命令末行模式 是vi的出口编辑模式—— 正常的编辑文字提示在 Touch Bar 的 Mac 电脑上 按 ESC 不方便可以使用 CTRL [ 替代**末行模式命令 **命令英文功能wwrite保存qquit退出如果没有保存不允许退出q!quit强行退出不保存退出wqwrite quit保存并退出x保存并退出常用命令命令线路图重复次数在命令模式下**先输入一个数字再跟上一个命令**可以让该命令重复执行指定次数移动和选择多练vi 之所以快关键在于** 能够快速定位到要编辑的代码行**移动命令能够 和** 编辑操作** 命令组合使用编辑操作删除、复制、粘贴、替换、缩排撤销和重复查找替换编辑学习提示vi 的命令较多不要期望一下子全部记住个别命令忘记了只是会影响编辑速度而已在使用 vi 命令时注意 关闭中文输入法移动基本要熟练使用 vi首先应该学会怎么在** 命令模式** 下能快速移动光标编辑操作命令能够和 移动命令 结合在一起使用上、下、左、右命令功能手指h向左食指j向下食指k向上中指l向右无名指行内移动命令英文功能wword向后移动一个单词bback向前移动一个单词0行首^行首第一个不是空白字符的位置$行尾行数移动命令英文功能gggo文件顶部Ggo文件末尾数字gggo移动到 数字 对应行数数字Ggo移动到 数字 对应行数:数字移动到 数字 对应行数屏幕移动命令英文功能Ctrl bback向上翻页Ctrl fforward向下翻页HHead屏幕顶部MMiddle屏幕中间LLow屏幕底部移动程序段落移动vi 中使用 空行 来区分段落在程序开发时通常一段功能相关的代码会写在一起—— 之间没有空行命令功能{上一段}下一段括号切换在程序世界中()、[]、{}使用频率很高而且 都是成对出现的命令功能%括号匹配及切换标记在开发时某一块代码可能需要稍后处理例如编辑、查看此时先使用m增加一个标记这样可以 在需要时快速地跳转回来 或者 执行其他编辑操作标记名称 可以是a~z或者A~Z之间的任意 一个 字母添加了标记的行如果被删除标记同时被删除如果 在其他行添加了相同名称的标记之前添加的标记也会被替换掉命令英功能mxmark添加标记 xx 是 a~z 或者 A~Z 之间的任意一个字母x直接定位到标记 x 所在位置选中文本可视模式学习复制命令前应该先学会怎么样选中 要复制的代码在vi中要选择文本需要先使用Visual命令切换到可视模式vi 中提供了 三种 可视模式可以方便程序员选择选中文本的方式按ESC可以放弃选中返回到命令模式命令模式功能v可视模式从光标位置开始按照正常模式选择文本V可视行模式选中光标经过的完整行Ctrl v可视块模式垂直方向选中文本可视模式下可以和 移动命令 连用例如ggVG能够选中所有内容撤销和恢复撤销在学习编辑命令之前先要知道怎样撤销之前一次 错误的 编辑动作命令英文功能uundo撤销上次命令CTRL rredo恢复撤销的命令删除文本命令英文功能xcut删除光标所在字符或者选中文字d(移动命令)delete删除移动命令对应的内容dddelete删除光标所在行可以 ndd 复制多行Ddelete删除至行尾提示如果使用可视模式已经选中了一段文本那么无论使用d还是x都可以删除选中文本删除命令可以和 移动命令 连用以下是常见的组合命令* dw # 从光标位置删除到单词末尾 * d0 # 从光标位置删除到一行的起始位置 * d} # 从光标位置删除到段落结尾 * ndd # 从光标位置向下连续删除 n 行 * d代码行G # 从光标所在行 删除到 指定代码行 之间的所有代码 * da # 从光标所在行 删除到 标记a 之间的所有代码复制、粘贴vi 中提供有一个 被复制文本的缓冲区.**复制 **命令会将选中的文字保存在缓冲区.**删除 **命令删除的文字会被保存在缓冲区.在需要的位置使用 **粘贴 **命令可以将缓冲区的文字插入到光标所在位置命令英文功能y(移动命令)copy复制yycopy复制一行可以 nyy 复制多行ppaste粘贴提示命令d、x类似于图形界面的剪切操作——CTRL X命令y类似于图形界面的复制操作——CTRL C命令p类似于图形界面的粘贴操作——CTRL Vvi 中的文本缓冲区同样只有一个如果后续做过** 复制、剪切** 操作之前缓冲区中的内容会被替换注意vi 中的 文本缓冲区 和系统的 剪贴板 不是同一个所以在其他软件中使用CTRL C复制的内容不能在vi中通过P命令粘贴可以在编辑模式下使用 鼠标右键粘贴4.7 替换命令英文功能工作模式rreplace替换当前字符命令模式Rreplace替换当前行光标后的字符替换模式R命令可以进入替换模式替换完成后按下ESC可以回到命令模式替换命令的作用就是不用进入编辑模式对文件进行轻量级的修改4.8 缩排和重复执行命令功能向右增加缩进向左减少缩进.重复上次命令缩排命令在开发程序时统一增加代码的缩进比较有用一次性 在选中代码前增加 4 个空格就叫做增加缩进一次性 在选中代码前删除 4 个空格就叫做减少缩进在可视模式下缩排命令只需要使用 一个或者在程序中缩进 通常用来表示代码的归属关系前面空格越少代码的级别越高前面空格越多代码的级别越低查找常规查找命令功能/str查找 str查找到指定内容之后使用 Next 查找下一个出现的位置n:查找下一个N:查找上一个如果不想看到高亮显示可以随便查找一个文件中不存在的内容即可单词快速匹配命令功能*向后查找当前光标所在单词#向前查找当前光标所在单词在开发中通过单词快速匹配可以快速看到这个单词在其他什么位置使用过查找并替换在vi中查找和替换命令需要在 末行模式 下执行记忆命令格式:%s///g全局替换一次性替换文件中的所有出现的旧文本命令格式如下:%s/旧文本/新文本/g可视区域替换先选中 要替换文字的 范围命令格式如下:s/旧文本/新文本/g确认替换如果把末尾的 g 改成 gc 在替换的时候会有提示推荐使用:%s/旧文本/新文本/gcy - yes替换n - no不替换a - all替换所有q - quit退出替换l - last最后一个并把光标移动到行首^E向下滚屏^Y向上滚屏插入命令在 vi 中除了常用的 i 进入 编辑模式 外还提供了以下命令同样可以进入编辑模式命令英文功能常用iinsert在当前字符前插入文本常用Iinsert在行首插入文本较常用aappend在当前字符后添加文本Aappend在行末添加文本较常用o在当前行后面插入一空行常用O在当前行前面插入一空行常用实例演练演练 1 —— 编辑命令和数字连用在开发中可能会遇到连续输入 N 个同样的字符在 Python 中有简单的方法但是其他语言中通常需要自己输入例如********** 连续 10 个星号要实现这个效果可以在 **命令模式 **下1.输入10表示要重复 10 次2.输入i进入 编辑模式3.输入*也就是重复的文字4.按下ESC返回到 命令模式返回之后vi就会把第2、3两步的操作重复10次提示正常开发时在 进入编辑模式之前不要按数字演练 2 —— 利用 可视块 给多行代码增加注释在开发中可能会遇到一次性给多行代码 增加注释 的情况在Python中要给代码增加注释可以在代码前增加一个#要实现这个效果可以在 命令模式 下1.移动到要添加注释的 第 1 行代码按^来到行首2.按CTRL v进入** 可视块 模式**3.使用j向下连续选中要添加的代码行4.输入I进入 编辑模式并在 行首插入注意一定要使用 I5.输入#也就是注释符号6.按下ESC返回到 命令模式返回之后vi会在之前选中的每一行代码 前 插入#分屏命令属于 vi 的高级命令 —— 可以 同时编辑和查看多个文件末行命令扩展末行命令 主要是针对文件进行操作的保存、退出、保存退出、搜索替换、另存、新建、浏览文件命令英文功能:e .edit会打开内置的文件浏览器浏览要当前目录下的文件:n 文件名new新建文件:w 文件名write另存为但是仍然编辑当前文件并不会切换文件提示切换文件之前必须保证当前这个文件已经被保存已经学习过的 末行命令命令英文功能:wwrite保存:qquit退出如果没有保存不允许退出:q!quit强行退出不保存退出:wqwrite quit保存并退出:x保存并退出:%s///gc确认搜索并替换在实际开发中可以使用w命令 阶段性的备份代码分屏命令使用 分屏命令可以 同时编辑和查看多个文件命令英文功能:sp [文件名]split横向增加分屏:vsp [文件名]vertical split纵向增加分屏切换分屏窗口分屏窗口都是基于CTRL W这个快捷键的w对应的英文单词是window命令英文功能wwindow切换到下一个窗口rreverse互换窗口cclose关闭当前窗口但是不能关闭最后一个窗口qquit退出当前窗口如果是最后一个窗口则关闭 vioother关闭其他窗口调整窗口大小命令功能增加窗口高度-减少窗口高度增加窗口宽度减少窗口宽度等分窗口大小调整窗口宽高的命令可以和数字连用例如5 CTRL W 连续 5 次增加高度常用命令速查图Vim命令图解vimrcvimrc是vim的配置文件可以设置vim的配置包括**热键、配色、语法高亮、插件 **等Linux中vimrc有两个位置家目录下的配置文件优先级更高/etc/vim/vimrc ~/.vimrc常用的插件有1.代码补全2.代码折叠3.搜索4.Git 集成网上有很多高手已经配置好的针对python开发的vimrc文件可以下载过来直接使用或者等Linux比较熟悉后再行学习视频教程