神器Vim之命令介绍

前天晚上看casa直播项目的组件化,不仅了解了如何快速对现有项目进行组件化,以及进一步不断迭代,实现完全组件化的过程;同时,也被casavim技能的熟练程度所震撼。早就听说,vimunix系统上文本编辑的神器,亦有许多牛人用vim编程可以键字如飞,效率之高令人望尘莫及。也许我们成不了牛人,但是学会vim还是很有必要的,毕竟它确实能够提高文本的编辑效率。于是,花了两天时间,又重新系统学习了vim的各种命令,现总结一下,方便用时再查。

一.vim的模式

vim大致有三种模式:

  1. 命令模式:主要用来浏览和修改文本内容

    一般情况下,vim打开的都是命令模式(正常模式);任何模式下,按下ESC键都可以进入命令模式

  2. 插入模式:用来向文本中添加内容

    通过iIaAsS等等指令可以进入插入模式,之后就可以修改文本内容了

  3. 编辑模式:用于操作文本文件

    通过:命令可以进入编辑模式,之后就可以保存文件、改变编辑器本身状态等等

其实,vim为了增强功能,还有另外两种模式:

  1. 可视模式:用于复制文本

    命令模式下,按v可以进入可视模式,之后就可以移动光标选择文本;按ctrl + v可以进入视行模式,可以进行列选中

  2. 替换模式

    命令模式下,按R进入替换模式

二.文档的操作

编辑模式下执行该命令

  1. vim filename -> 打开文档
  2. :e file -> 关闭当前编辑的文件,并打开新的文件
  3. :e! file -> 放弃当前对文件的修改并关闭,同时打开新文件
  4. :e -> 重新加载文档
  5. :e! -> 放弃改动,并重新加载文档
  6. :fctrl + g -> 显示文档名、是否修改、光标位置等等
  7. :f filename -> 把编辑的文件另存为新的filename,需要wq,否则不会保存新文件
  8. :w -> 保存修改
  9. :n1,n2w filename -> 选择性保存从n1行到n2行的内容
  10. :wq:xZZ -> 保存并退出
  11. :q[uit] -> 退出当前窗口
  12. :saveas filename -> 另存为新的filename
  13. :Sex -> 水平分割一个窗口,浏览文件系统
  14. :Vex -> 垂直分割一个窗口,浏览文件系统

三.文档的移动

文档的移动都是在命令模式(正常模式)下进行的

  1. h退格 -> 左移一个字符
  2. l空格 -> 右移一个字符
  3. j -> 下移一行
  4. k -> 上移一行
  5. +enter -> 把光标移动到下一行非空白字符
  6. w -> 前移一个单词,光标停在单词的开头
  7. W -> 前移一个单词,光标停在单词的开头,但是会忽略一些标点
  8. e -> 前移一个单词,光标停在单词的末尾
  9. E -> 前移一个单词,光标停在单词的末尾,如果词尾有标点,则移动到标点
  10. b -> 后移一个单词,光标停在单词的开头
  11. B -> 后移一个单词,光标停在单词的开头,但是会忽略一些标点
  12. ge -> 后移一个单词,光标停在单词的末尾
  13. gE -> 后移一个单词,光标停在单词的末尾,如果词尾有标点,则移动到标点
  14. ( -> 前移一句
  15. ) -> 后移一句
  16. { -> 前移一段
  17. } -> 后移一段
  18. fc -> 把光标移动到同一行的下一个c字符处
  19. Fc -> 把光标移动到同一行的上一个c字符处
  20. tc -> 把光标移动到同一行的下一个c字符前
  21. Tc -> 把光标移动到同一行的上一个c字符后

上面的操作都可以配合数字n使用,例如:3h 表示光标左移3个字符。下面是另外一些文档移动的命令:

  1. 0 -> 移动到行首
  2. ^ -> 移动到本行第一个非空白字符
  3. $ -> 移动到行尾
  4. n| -> 把光标移到第n列上
  5. nG -> 把光标移到第n行上
  6. H -> 把光标移到到屏幕最顶端一行
  7. M -> 把光标移到到屏幕中间一行
  8. L -> 把光标移到到屏幕最底端一行
  9. gg -> 把光标移到到文件头部
  10. G -> 把光标移到到文件尾部

四.翻屏

翻屏命令是在命令模式进行的

  1. ctrl + f -> 下翻一屏
  2. ctrl + b -> 上翻一屏
  3. ctrl + d -> 下翻半屏
  4. ctrl + u -> 上翻半屏
  5. ctrl + e -> 向下滚动一行
  6. ctrl + y -> 向上滚动一行
  7. n% -> 把光标移动到文件内容的n%位置处
  8. zz -> 把当前行移动到屏幕中央
  9. zt -> 把当前行移动到屏幕顶端
  10. zb -> 把当前行移动到屏幕底端

五.插入文本

从命令模式进入插入模式,设置光标开始输入的位置

  1. i -> 在光标前插入
  2. I -> 在当前行的第一个非空字符前插入
  3. a -> 在光标后插入
  4. A -> 在当前行最后插入
  5. o -> 在下面新建一行插入
  6. O -> 在上门新建一行插入
  7. :r filename -> 在当前行位置插入另一个文件的内容
  8. :[n]r filename -> 在第n行插入另一个文件的内容
  9. :r !date -> 在当前行(空行)插入日期,或当前行非空,就在下一行插入日期。同理,:r !command 可以把shell命令的输出插入当前行

小技巧

  1. 命令模式下,按数字n,然后按i,输入=,最后按ESC,就会在光标处插入n=,这在做分割线时非常有用
  2. 视行模式下(ctrl+v),选择要操作的行,按iI)输入插入内容,之后按两次ESC,就会在每行选定的区域出现插入的内容

下面是修改文本的命令,功能是先删除文字,然后等待插入文本:

  1. c[n]w[n]cw -> 删除光标后n个单词,然后进入插入模式
  2. c[n]l[n]cl -> 删除光标后n个字母,然后进入插入模式
  3. c[n]h[n]ch -> 删除光标前n个字母,然后进入插入模式
  4. [n]cc -> 删除当前行及以后的n-1行,然后进入插入模式
  5. [n]s -> 删除光标之后的n个字符,然后进入插入模式
  6. [n]S -> 删除当前行及以后的n-1行,然后进入插入模式

类似的操作也适用于:dy

六.剪切、复制和粘贴

在命令模式执行该命令

  1. [n]x -> 剪切光标右边n个字符,相当于d[n]l
  2. [n]X -> 剪切光标左边n个字符,相当于d[n]h
  3. y -> 在可视模式下复制选中的文本
  4. yyY -> 复制整行文本
  5. y[n]w -> 复制n个词
  6. y$ -> 复制从光标到行尾的内容
  7. y0 -> 复制从光标到行首的内容
  8. y^ -> 复制从光标到本行非字符的内容
  9. :m,ny -> 复制m行到n行的内容
  10. y1Gygg -> 复制光标以上所有行
  11. yG -> 复制光标以下所有行
  12. d -> 删除(剪切)在可视模式下选中的文本
  13. [n]dd -> 删除(剪切)n行
  14. :m,nd -> 删除(剪切)m行到n行的内容
  15. p -> 在光标之后粘贴
  16. P -> 在光标之前粘贴

文本对象可以快速的操作一个词、一个句子、一个段落等等,大大加快了文本操作的便捷性。其中,ydcv都可以和这些命令配合使用,具体如下:

  1. aw -> 一个词
  2. as -> 一个句子
  3. ap -> 一个段落

七.查找和替换

7.1查找

查找是在命令模式下执行的命令,用于快速查找特定的内容

  1. /something -> 在光标文本后面查找something
  2. ?something -> 在光标文本前面查找something
  3. /pattern/[+]n -> 将光标停在匹配pattern模式后面第number行
  4. /pattern/[-]n -> 将光标停在匹配pattern模式前面第number行
  5. n -> 向后查找下一个
  6. N -> 向前查找上一个

7.2替换

替换是在编辑模式下执行的命令,用于替换特定的内容

  1. :s/old/new -> 用new替换当前行的第一个old
  2. :s/old/new/g -> 用new替换当前行所有的old
  3. :n1,n2/old/new/g -> 用new替换n1行到n2行的所有old
  4. :%s/old/new/g -> 用new替换文件中的所有old
  5. :%s/^/xxx/g -> 在每一行的行首插入xxx
  6. :%s/$/xxx/g -> 在每一行的行尾插入xxx

八.排版

vim可以进行简单的快速的排版,下面的排版是在命令模式下执行

  1. [n]<< -> 向左缩进一个n个shiftwidth
  2. [n]>> -> 向右缩进一个n个shiftwidth
  3. J -> 拼接当前行和下一行
  4. gJ -> 拼接后不留空格

下面的排版是在编辑模式执行的命令

  1. :le(ft) -> 本行文字靠左
  2. :ce(nter) -> 本行文字居中
  3. :ri(ght) -> 本行文字靠右

vim还可以统计本行或者整个文本的字数,行数等等信息

  1. ctrl + g 统计文档的字符数、行数、文件名等信息

九.编辑文件

vim可以一次编辑多个文件,如:vim a.txt b.txt c.txt

  1. :next:n -> 编辑下一个文件
  2. :2n -> 编辑下2个文件
  3. :previous:N -> 编辑上一个文件
  4. :wnext -> 保存当前文件,并编辑下一个文件
  5. :wprevious -> 保存当前文件,并编辑上一个文件
  6. :args -> 显示文件列表
  7. vim -o filenames -> 在水平分割多个窗口中编辑多个文件
  8. vim -O filenames -> 在垂直分割多个窗口中编辑多个文件
  9. :split:sp -> 把当前窗口水平分割成两个窗口
  10. :vsplit:vsp -> 把当前窗口垂直分割成两个窗口
  11. :qall -> 关闭所有窗口
  12. :wall -> 保存所有修改过的窗口
  13. :only -> 只保留当前窗口,关闭其它窗口
  14. :close -> 关闭当前窗口
  15. [n]u -> 取消n个改动
  16. U -> 取消当前所有的改动

vim窗口分屏后,在多个编辑窗口直接切换编辑的命令如下:

  1. ctrl+w ctrl+w -> 切换下一个窗口
  2. ctrl+w p -> 切换到前一个窗口
  3. ctrl+w h(l,j,k) -> 切换到左 (右、下、上)的窗口
  4. ctrl+w H(L,J,K) -> 切换窗口到最左(右、下、上)的窗口

进入替换模式,就可以快速替换当前的文本,在命令模式才可以进入替换模式

  1. r -> 替换光标出的一个字符
  2. R -> 进入替换模式,可以进行多次替换,按esc回到命令模式

十.编程辅助技能

  1. g; -> 上一个修改过的地方
  2. g, -> 下一个修改过的地方
  3. [[ -> 跳转到上一行函数块开始的位置,需要有单独一行的{
  4. ]] -> 跳转到下一行函数块开始的位置,需要有单独一行的{
  5. [] -> 跳转到上一行函数块结束的位置,需要有单独一行的}
  6. ][ -> 跳转到下一行函数块结束的位置,需要有单独一行的}
  7. % -> 移动到匹配()、{}、[]的另一个符号上
  8. 可视模式下,选择代码块,然后按=,代码会进行自动缩排

下面的符号匹配能够高效的处理文本,可以把cdy'"([{<结合起来使用,可以加快编程速度,下面以c为例:

  1. ci' -> 修改、剪切或复制'之间的内容,不包含'本身
  2. ca' -> 修改、剪切或复制'之间的内容,包含'本身

十一.命令行

下面的命令是在编辑模式下执行

  1. :! cmd -> 执行外部命令
  2. :r !cmd -> 将命令的返回结果插入文件当前的位置
  3. :pwd -> 显示vim的工作目录
  4. :ver -> 显示版本信息

十二.Mac Terminal快捷键

  1. ctrl+u -> 删除整行
  2. ctrl+l -> 清屏

vim的命令大致有这么多,还有一些不是太常用的没有列举出,如有需要,请查看相关手册。如果你想用vim高效的编辑文本,还是要多练习,毕竟这么多命令,无法一下子全部记住。最后,附上一张vim的指法引导图,可以参考一下。(本文所有图片来自互联网,版权归源作者所有)

参考资料

http://blog.csdn.net/scaleqiao/article/details/45153379

http://www.cnblogs.com/xiaowant/articles/1992923.html

http://www.cnblogs.com/yangjig/p/6014198.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全局的情况下:即所有用户都能用这个配置文件地址:/etc/vimrc在文件中添加:setfileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936settermencoding=utf-8setencoding=utf-8如果只修改个人的vim配置情况:需要把/etc/
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。相关文章:史上最全Vim快捷键键位图—入门到进阶什么是vim
      vim正则匹配:空行:/^$/  /^[\t]*$/注释行:/^#/ /^[\t]*#/:1,$s/\([Rr]\)oot/\1ename/:1,$s/\(square\)and\(fair\)/\2and\1/ 
$select-editorSelectaneditor.Tochangelater,run'select-editor'.1./bin/ed2./binano<----easiest3./usr/bin/code4./usr/bin/vim.basic5./usr/bin/vim.tinyChoose1-5[2]:4
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下预览图安装工具:u盘、manjarokdeminimal20.0.3、win32DiskImager提取码:qt9f进bios、选择u盘启动、改语言、改时区、挂载分区(文件系统ext4、在200M左右的一个FAT分区上挂载/boot/efi)、安装安装很简单,按提示
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置vi文本编译器,其他的文本编译器则不一定存在很多软件的编译接口都会主动调用vivim有很强的程序编译能力,可以主动的一字体颜色辨别语法的正确性,方便程序设计因为程序简单,编译速度相当快vi的使用一般命令模
主机名字太长,怎么修改?  1.sudovim/etc/hostname 修改内容为wel,  本地主机名 2.sudovim/etc/hosts      修改主机名为wel,用于网络连接中主机名的识别 3.reboot 
目录#事故现场#事故原因#解决方法方法一:使用notepad转换方法二:使用vscode转换方法三:使用vim转换#参考#事故现场执行shell脚本文件,报错::notfound.sh:6:coreinstall.sh:查看脚本文件第6行,发现是空行;#事故原因window下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n
1、保存并退出linux下安装好了vim以及gcc后,我们开始新建一个c文件,例如:vimtest.c之后进入vim的编辑框中,点击i进入插入模式,开始编辑程序,当你编写好自己的程序之后,按Esc退出插入编辑状态,然后输入冒号加wq,点击Enter即可,完整的命令如下:wq如下图:  退出后,如果想要编译
概述使用VIM作简单字数统计背景想做一个简单的字数统计环境OSwin10shellmintty-2.9.41.需求概述需求需求统计文段内字符的数量支持自定义字符集2.方案1:vim自带统计概述vim自带方案操作定位到文段内某行vi
经典版下面这个键位图应该是大家最常看见的经典版了。对应的简体中文版其实经典版是一系列的入门教程键位图的组合结果,下面是不同编辑模式下的键位图。 
ssh是一个安全连接协议。作用两个:1.远程连接协议,2.远程文件传输协议协议默认端口为:22。 修改默认端口,再到ssh服务配置文件位置  vim/etc/ssh/ssh_config这条命令就可以修改了。按下ESC键,再输入:x 也可以退出vim。(和:q! 相同)修改注意:1.端口号在0-65535之间。2.别人
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢
在Vim中,有时需要将tab转换成space。使用ret命令(replacetab)。[range]ret[ab]![new-tabstop]举例:将第一行到文件尾的tab转换成space,每个tab用4个space替代。:setexpandtab:%ret!4如果没有给定4,则用当前的tab宽度设定替换为space。 相关配置文件命令::settabstop=4设
分屏命令记不得文件名就输入.可浏览文件命令英文功能:sp[文件名]split横向分屏:vsp[文件名]verticalsplit纵向分屏    切换分屏窗口先按Ctrlw切换窗口命令英文功能 wwindow切换下一个窗口 rreverse互换窗口 c
1查看ctags支持的语言ctags--list-languages2查看语言和扩展名的对应关系ctags--list-maps 3对当前目录下所有ctags支持的语言格式文件生成tagsctags-R*缺点很明显,tags会非常大,tags生成会非常慢,而且代码跳转会卡顿。4只对特定文件生成tagsctags`find-name"*.h"`ct
vim基本命令 $vimtutor可以查看基本的vim操作1h(left)j(down)k(up)l(right)q!wqi:insertbeforethecursor(insert)插队嘛,肯定在光标前面A:appendaftertheline(appending)2dw:删除一个单词,保留光标前面部分d$:删除光标之后的同行
~/.vimrc内容如下:setnocompatiblefiletypeoffsetrtp+=~/.vim/bundle/Vundle.vimcallvundle#begin()Plugin'VundleVim/Vundle.vim'Plugin'tpope/vim-fugitive'Plugin'tpope/vim-unimpaired'Plugin'tpope/vim-repeat'Plu
程序:硬盘静态的代码  占用磁盘空间进程:内存运行计算的代码 占用CPU运行内存父进程与子进程  树型结构进程唯一标识: PID僵尸进程找到父进程杀掉  孤儿进程疯狂要内存  危害大 pstree [选项]-a显示完整命令行   -p 查看PID [PID或用户
~/.vimrc"Configurationfileforvimsetmodelines=0 "CVE-2007-2438setnumber"setrelativenumber"显示相对行号(这个非常重要,慢慢体会)setcursorlinesetcursorcolumnsetrulersetscrollbindsetencoding=utf-8colormolokaisyntaxon"开启