前言

首先解析一个vim vi是unix/linux下极为普遍的一种文本编辑器,大部分机器上都有vi的各种变种,在不同的机器上常用不同的变种软件,其中vim比较好用也用的比较广泛。vim是Vi Improved的缩写,表示更好的vi。本文就说些比较有用、比较常用的命令,若能熟练运用这些命令,那么会发现编辑文件很大帮助,尤其作为开发人员,能够快速的提高开发效率。

说明

  以下的例子中 xxx表示在命令模式下输入xxx并回车

  以下的例子中 :xxx表示在扩展模式下输入xxx并回车

  小括号中的命令表示相似命令

  在编辑模式或可视模式下输入的命令会另外注明

1 查找

/xxx(?xxx)
表示在整篇文档中搜索匹配xxx的字符串,/ 表示向下查找,? 表示向上查找,其中xxx可以是正则表达式,关于正则表达式就不多说了.
一般来说是区分大小写的,要想不区分大小写,那得先输入:set ignorecase
查找到以后,再输入 n 查找下一个匹配处,输入 N 反方向查找 *(#)
当光标停留在某个单词上时,输入这条命令表示查找与该单词匹配的下(上)一个单词,同样,再输入 n 查找下一个匹配处,输入 N 反方向查找 g*(g#)
此命令与上一条命令相似,只不过它不完全匹配光标所在处的单词,而是匹配包含该单词的所有字符串 gd
本命令查找与光标所在单词相匹配的单词,并将光标停留在文档的非注释段中第一次出现这个单词的地方 %
本命令查找与光标所在处相匹配的反括号,包括() [] {} f(F)x
本命令表示在光标所在行进行查找,查找光标右(左)方第一个x字符
找到后:
输入 ; 表示继续往下找
输入 , 表示反方向查找

2 快速移动光标

在vi中,移动光标和编辑是两件事,正因为区分开来,所以可以很方便的进行光标定位和编辑,因此能更快一点移动光标是很有用的。

w(e)             移动光标到下一个单词
b 移动光标到上一个单词
0 移动光标到本行最开头
^ 移动光标到本行最开头的字符处
$ 移动光标到本行结尾处 H 移动光标到屏幕的首行
M 移动光标到屏幕的中间一行
L 移动光标到屏幕的尾行
gg 移动光标到文档的首行
G 移动光标到文档的尾行
c-f (即 ctrl 键与 f 键一同按下) 本命令即page down
c-b (即 ctrl 键与 b 键一同按下) 本命令即page up '' 此命令相当有用,它移动光标到上一个标记处,比如用gd, *等查找到某个单词后,再输入此命令则回到上次停留的位置 ' 此命令相当好使,它移动光标到上一次的修改行 ` 此命令相当强大,它移动光标到上一次的修改点

3 拷贝,删除与粘贴

在vi中,y 表示拷贝,d 表示删除,p 表示粘贴,其中拷贝与删除是与光标移动命令结合的,看几个例子就能够明白了。

yw            表示拷贝从当前光标到光标所在单词结尾的内容
dw 表示删除从当前光标到光标所在单词结尾的内容
y0 表示拷贝从当前光标到光标所在行首的内容
d0 表示删除从当前光标到光标所在行尾的内容
y$ 表示拷贝从当前光标到光标所在行尾的内容
d$ 表示删除从当前光标到光标所在行尾的内容
yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容
dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容

特殊地:

yy            表示拷贝光标所在行
dd 表示删除光标所在行
D 表示删除从当前光标到光标所在行尾的内容

关于拷贝、删除和粘贴的复杂用法与寄存器有关,可以自行查询。

4 数字与命令

在vi中数字与命令结合往往表示重复进行此命令,若在扩展模式的开头出现则表示行号定位,如:

5fx               表示查找光标后第5个x字符
5w(e)    移动光标到下五个单词
5yy 表示拷贝光标以下5行
5dd   表示删除光标以下5行
y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容
:12, 24y  表示拷贝第12行到第24行之间的内容
:12, y 表示拷贝第12行到光标所在行之间的内容
:, 24y 表示拷贝光标所在行到第24行之间的内容 删除类似

5 快速输入字符

在vi中,不要求你输入每一个字符,可以有很多种方法快速输入一些字符,使用linux/unix的同学一定有一个经验,在命令行输入命令时敲入头几个字符再按TAB,系统就会自动将剩下的字符补齐,假如有很多个匹配则会打印出来,这就是著名的命令补齐,vi中有许多的字符串补齐命令,非常方便。

c-p(c-n) 在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜索开头与其匹配的单词并补齐, 不断输入此命令则循环查找 此命令会在所有在这个 vim 程序中打开的文件中进行匹配

c-x-l    在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的文档中进行匹配

c-x-f    在编辑模式中, 这个命令表示补齐文件名 如输入:/usr/local/tom 后再输入此命令则它会自动匹配出:/usr/local/tomcat/

abbr     即缩写 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个字符串 比如编写java文件的常常输入 Systemoutprintln, 这很是麻烦, 所以应该用缩写来减少敲字 可以这么做:
:abbr sprt Systemoutprintln
以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为Systemoutprintln

6 替换

替换是vi的强项,因为可以用正则表达式来匹配字符串,以下提供几个例子。

:s/aa/bb/g         将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s/\/bb/g         将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
:%s/aa/bb/g        将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/aa/bb/g      将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:12,23s/^/#/       将从12行到23行的行首加入 # 字符
:%s= *$==        将所有行尾多余的空格删除
:g/^\s*$/d        将所有不包含字符(空格也不包含)的空行删除

7 对齐命令

vim下的对齐命令,以下是几种方法。

方法一:
命令模式下:=;1,$ 方法二:
gg(把光标定位到最上面),V(进入visual模式),shift+g(选中整篇文档),然后= 方法三:
gg=G

linux vi(vim)常用命令汇总(转)的更多相关文章

  1. linux vi(vim)常用命令汇总

    1 查找 /xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找其中xxx可以是正规表达式,关于正规式就不多说了. 一般来说是区分大小写的, 要想不区分大 ...

  2. vim常用命令汇总

    vim常用命令汇总: http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 定位 本行第一个字符 ctrl+$ ...

  3. linux vi编辑常用命令

      linux vi编辑常用命令 来源:互联网 作者:佚名 时间:07-10 21:31:14 [大 中 小] linux vi编辑常用命令,需要的朋友可以参考下   vi编辑器中有三种状态模式 1. ...

  4. VI/VIM 常用命令

    VI/VIM 常用命令=========== 整理自鸟哥的私房菜 ---------- - 移动光标 命令                    | 描述----------------------- ...

  5. [svc][op]vim常用命令汇总

    vim常用命令汇总: 定位 本行第一个字符 ctrl+$ 本行最后一个字符 0gg 文章首行 ctrl+G 文章行尾 u 撤销(Undo) 删除 D 从当前位置删除到行尾 ("d$" ...

  6. Linux vi 编辑器 常用命令行

    1.vi 模式   a) 一般模式: vi 处理文件时,一进入该文件,就是一般模式了.   b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作.等按下'i,I,o,O,a, ...

  7. vi/vim 常用命令总结

    目录 Linux vi/vim编辑 vim键盘图 vim的三种模式 命令模式.输入模式.输出模式 vim使用实例 vi/vim按键说明 第一部分:一般模式可用的光标移动.复制粘贴.搜索替换等 第二部分 ...

  8. Linux 之 Vim常用命令

    Vim常用命令 参考教程:[千峰教育] 终端编辑命令工具: vi/vim.emacs等. vim简介: vim是vi的扩展,被誉为终端编辑之神. vim安装: yum install -y vim 工 ...

  9. Linux 和 Vim 常用命令整理

    Sftp常用命令: lcd f:本地切换到 F盘 lpwd本地 当前目录 lls本地 文件列表 put 本地 上传文件到服务器(put输入后,回车会有弹窗,选择上传文件) get下载文件到本地 Lin ...

随机推荐

  1. 谷歌chrome多个相同用户登陆同一个机器多开配置

    创建快捷方式,目标中填写:路径+参数如下所示即可 参数:--user-data-dir=%LOCALAPPDATA%\Google\Chrome\%SessionName%

  2. JuiceFS CSI Driver 的最佳实践

    文章根据 Juicedata 工程师朱唯唯,在云原生 Meetup 杭州站所作主题演讲<JuiceFS CSI Driver 的最佳实践>整理而成. 大家好,我是来自 Juicedata ...

  3. PE节表详细分析

    目录 PE节表详细分析 0x00 前言 0x01 PE节表分析 节表结构 节表数量 节表名字 节表大小 节位置 节表属性 0x02 代码编写 PE节表详细分析 0x00 前言 上一篇文章我们学习了PE ...

  4. Linux mem 2.5 Buddy 内存回收机制

    文章目录 1. 简介 2. LRU 组织 2.1 LRU 链表 2.2 LRU Cache 2.3 LRU 移动操作 2.3.1 page 加入 LRU 2.3.2 其他 LRU 移动操作 3. LR ...

  5. 9组-Alpha冲刺-1/6

    一.基本情况 队名:不行就摆了吧 组长博客:https://www.cnblogs.com/Microsoft-hc/p/15526668.html 小组人数: 8 二.冲刺概况汇报 谢小龙 过去两天 ...

  6. SQL 添加列,删除列,修改列的类型

    alter table 表名 add 列名 数据类型 如:alter table student add nickname char(20) alter table tableName(表名) add ...

  7. 团队作业3--需求改进&系统

    需求改进&系统设计 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 这个作业的目标 需求改进&系统设计 目录 需求改进&系统设计 需求&原型改进 针对课堂 ...

  8. etcd install & configuration

    目录 概述 先决条件 相关术语 ETCD 部署 源码安装 其他方式 安装报错 配置文件详解 etcdctl 使用 日志独立 概述 etcd 是兼具一致性和高可用性的键值数据库,为云原生架构中重要的基础 ...

  9. [nowcoder5669A]Ancient Distance

    对于一个$k$,可以二分枚举答案并判断,判断过程可以贪心找最深的点(线段树区间max)+倍增+线段树区间覆盖(清0)来实现,时间复杂度$o(klog_{2}n)$ 考虑反过来,暴力枚举答案$x$并求出 ...

  10. 关于 RocketMQ ClientID 相同引发的消息堆积的问题

    首先,造成这个问题的 BUG RocketMQ 官方已经在 3月16号 的这个提交中修复了,这里只是探讨一下在修复之前造成问题的具体细节,更多的上下文可以参考我之前写的 <RocketMQ Co ...