VI 编辑器是一个基于命令行的、功能强大的文本编辑器,最早为 Unix 系统开发,后来也被移植到许多的 Unix 和 Linux 发行版上。

在 Linux 上还存在着另一个 VI 编辑器的高阶版本 —— VIM(也被称作 VI IMproved)。VIM 只是在 VI 已经很强的功能上添加了更多的功能,这些功能有:

  • 支持更多 Linux 发行版,
  • 支持多种编程语言,包括 python、c++、perl 等语言的代码块折叠,语法高亮,
  • 支持通过多种网络协议,包括 http、ssh 等编辑文件,
  • 支持编辑压缩归档中的文件,
  • 支持分屏同时编辑多个文件。

接下来我们会讨论 VI/VIM 的命令以及选项。本文出于教学的目的,我们使用 VI 来举例,但所有的命令都可以被用于 VIM。首先我们先介绍 VI 编辑器的两种模式。

命令模式

命令模式下,我们可以执行保存文件、在 VI 内运行命令、复制/剪切/粘贴操作,以及查找/替换等任务。当我们处于插入模式时,我们可以按下 EscapeEsc)键返回命令模式

插入模式

在插入模式下,我们可以键入文件内容。在命令模式下按下 i 进入插入模式。

创建文件

我们可以通过下述命令建立一个文件(LCTT 译注:如果该文件存在,则编辑已有文件):

1

2

$ vi filename

一旦该文件被创建或者打开,我们首先进入命令模式,我们需要进入输入模式以在文件中输入内容。我们通过前文已经大致上了解这两种模式。

退出 Vi

如果是想从插入模式中退出,我们首先需要按下 Esc 键进入命令模式。接下来我们可以根据不同的需要分别使用两种命令退出 Vi。

  1. 不保存退出 – 在命令模式中输入 :q!
  2. 保存并退出 – 在命令模式中输入 :wq

移动光标

下面我们来讨论下那些在命令模式中移动光标的命令和选项:

  1. k 将光标上移一行
  2. j 将光标下移一行
  3. h 将光标左移一个字母
  4. i 将光标右移一个字母注意:如果你想通过一个命令上移或下移多行,或者左移、右移多个字母,你可以使用 4k 或者 5j,这两条命令会分别上移 4 行或者右移 5 个字母。
  5. 0 将光标移动到该行行首
  6. $ 将光标移动到该行行尾
  7. nG 将光标移动到第 n 行
  8. G 将光标移动到文件的最后一行
  9. { 将光标移动到上一段
  10. } 将光标移动到下一段

除此之外还有一些命令可以用于控制光标的移动,但上述列出的这些命令应该就能应付日常工作所需。

编辑文本

这部分会列出一些用于命令模式的命令,可以进入插入模式来编辑当前文件

  1. i 在光标所在行的行首插入内容
  2. I 在光标所在行的行尾插入内容
  3. a 在当前光标之前插入内容
  4. A 在当前光标之后插入内容
  5. o 在当前光标所在行之前添加一行
  6. O 在当前光标所在行之后添加一行

删除文本

以下的这些命令都只能在命令模式下使用,所以首先需要按下 Esc 进入命令模式,如果你正处于插入模式:

  1. dd 删除光标所在的整行内容,可以在 dd 前增加数字,比如 2dd 可以删除从光标所在行开始的两行
  2. d$ 删除从光标所在行开始的所有行
  3. d^ 删除从文件开始直到光标所在行的所有行 4 dw 删除从光标所在位置直到下一个词开始的所有内容

复制与黏贴

  1. yy 复制当前行,在 yy 前添加数字可以复制多行
  2. p 在光标之后粘贴复制行
  3. P 在光标之前粘贴复制行

上述就是可以在 VI/VIM 编辑器上使用的一些基本命令。在未来的教程中还会继续教授一些更高级的命令。如果有任何疑问和建议,请在下方评论区留言。

vim与cscope和ctags

常见问题

1. cscope配置nmap不生效

环境:Ubuntu 18.04

详情:在$(HOME)/.vimrc中对cscope的快捷组合键进行配置,实际运行vim编辑文件时使用快捷键进行搜索不生效,配置如下:

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR> :copen<CR><CR>

原因:Ubuntu中组合键没有开启

解决:安装Tweaks工具套件,在Keyboard&Mouse设置一栏中打开Compose Key,选择对应的快捷键选项后即可

2. cscope查找到多条匹配项无法一一查看或者选择跳转

解决:cscope配置缺少,在vimrc配置文件中添加如下配置

set cscopequickfix=s-,c-,d-,i-,t-,e-

小技巧:在vimrc中添加下面两项配置就可以在输出的搜索结果中快速前后跳转查看

nmap <C-n> :cnext<CR>
nmap <C-p> :cprev<CR>

使用 Vi/Vim 编辑器:基础篇相关推荐

  1. 神级编辑器 Vim 使用-基础篇

    最近一段时间, 看了两本关于 vim 的书, 重新学了一遍 vim, 在感慨 vim 强大的同时, 也为从前的自满感到汗颜, 我拿起了从前做的关于 vim 的笔记, 重新梳理了一遍, 作为一个系列分享 ...

  2. linux中国vi,使用 Vi/Vim 编辑器:高级概念 | Linux 中国

    早些时候我们已经讨论了一些关于 VI/VIM 编辑器的基础知识,但是 VI 和 VIM 都是非常强大的编辑器,还有很多其他的功能可以和编辑器一起使用.在本教程中,我们将学习 VI/VIM 编辑器的一些 ...

  3. 6.Linux中vi/vim编辑器详解

    文章目录 前言 一.vim/vi 介绍 二.vi/vim学习图(初级) 三.文本编辑(状态)概览 四.使用vi打开文本的方式 五.命令模式 1.进入插入模式(进行文本编辑) 2.从插入模式切换为命令行 ...

  4. Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令

    Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...

  5. Ubuntu中vi / vim编辑器快捷操作

    Ubuntu安装vim vi是vim的简化版,建议安装vim 安装vim,打开新的终端,输入: sudo apt-get install vim-gtk (好像sudo apt-get install ...

  6. linux vim修改字符串,Linux系统vi(vim)编辑器命令说明

    Linux系统vi(vim)编辑器命令说明 刘大喵 • 2019 年 02 月 06 日 vi(vim)是上Linux非常常用的代码编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim ...

  7. 二、Linux 文件与目录结构、VI/VIM 编辑器(重要)

    1.Linux 文件 Linux 系统中一切皆文件. 2.Linux 目录结构 /bin(存放二进制文件的二进制文件夹,(普通用户的文件)) ·是Binary的缩写,这个目录存放着最经常使用的命令/s ...

  8. VI/VIM 编辑器

      Ubuntu自带了 VI 编辑器, VIM 编辑器是 VI 编辑器升级版本, VI/VIM 编辑器都是一种基于指令式的编辑器,不需要鼠标,也没有菜单,仅仅使用键盘来完成所有的编辑工作.安装 VIM ...

  9. VI/VIM 编辑器常用操作

    目录 VI/VIM编辑器常用操作介绍: 1.VI和VIM是什么 2.一般模式 2.1常用语法 3.编辑模式 3.1常用语法 4.指令模式 4.1基本语法 5.模式转换 6.VI/VIM键盘图 1.VI ...

  10. vi/vim编辑器命令说明

    前言 vi编辑器是所有Unix及Linux系统下标准的编辑器,对Unix及Linux系统的任何版本,vi编辑器是完全相同的.vim是vi的升级版,增加了一些功能,对vi命令是完全兼容的.在一些基本命令 ...

最新文章

  1. 档案用虚拟化服务器还是物理机,利用虚拟化将一台NAS满足不同部门
  2. String、StringBuffer、StringBuilder介绍
  3. kali桥接模式无法上网_听没听过用手机接路由器上网?
  4. Linux系统安全工具tcpdump用法
  5. 13寸笔记本电脑尺寸_2020笔记本电脑推荐(华为篇)
  6. java 判断日期连续_如何在Java中检查日期是否大于另一个日期?[重复]
  7. 彩票模拟选号程序java_java课程设计-彩票购买抽奖程序
  8. 拓端tecdat|使用R语言创建自定义桑基图Sankey图
  9. python产生随机数
  10. Layui 表格table自定义每一列的样式
  11. java校园自行车租赁买卖系统ssm
  12. python识别视频中火焰_监控视频中火焰检测算法
  13. 解决在onedrive里无法打开onenote笔记本的问题
  14. Oracle标准成本差异,标准成本与实际成本比较
  15. 论文笔记——Contextual Multi-armed Bandit Algorithm for Semiparametric(半参数) Reward Model
  16. 【MindSpore】DCGAN生成漫画头像-----利用华为云modelarts云终端实现
  17. SIM卡相关知识总结
  18. Light OJ 1129 Consistency Checker
  19. 完整的芯片反向设计流程原来是这样的!(实例讲解)
  20. 神码ai人工智能写作机器人_人工智能和机器学习可以改善营销的6种方式

热门文章

  1. 孪生素数问题--nyoj26
  2. 用ASP.NET刷新页面的几种有效方法
  3. 高性能JavaScript 笔记之 第2章 数据访问
  4. silverlight 地图轨迹回放
  5. 【转】SQL SERVER convert函数日期格式化应用
  6. 封装dialog弹窗
  7. 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink
  8. mybatis 实现查询商品列表的分页
  9. 编辑器有bug。。。。。。
  10. 《HTML CSS JavaScript 网页制作从入门到精通 第3版》—— 2.8 其他标记