vim_vimdiff - CSDN
vim 订阅
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。 展开全文
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。
信息
优    点
功能强大、高度可定制
外文名
VIM
平    台
Unix、Linux、Mac OS、Windows
中文名
文本编辑器
功    能
文本编辑
应用范围
计算机
VIM简介
Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。 [1]  vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。 [1] 
收起全文
精华内容
参与话题
  • vim从入门到精通--基础命令使用

    千人学习 2018-10-22 21:38:05
    这是一门vim基础教程。 主要学习vim的基本命令使用:包括光标移动、文本复制、删除、粘贴、文本的查找、修改与替换;修改的撤销与保存、多窗口操作、标签页的使用等基本操作。 后续会推出篇和定制篇,QQ群:...
  • vim 操作命令大全

    万次阅读 多人点赞 2018-06-10 22:57:56
    曾经使用了两年多的Vim,手册也翻过一遍。虽然现在不怎么用vim了,曾经的笔记还是贴出来,与喜欢vim的朋友分享。1. 关于Vimvim是我最喜欢的编辑器,也是Linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我...

    曾经使用了两年多的Vim,手册也翻过一遍。虽然现在不怎么用vim了,曾经的笔记还是贴出来,与喜欢vim的朋友分享。

    1. 关于Vim

    vim是我最喜欢的编辑器,也是Linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如果是初学vi,运行一下vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行vimtutor zh)

    1.1 Vim的几种模式

    • 正常模式:可以使用快捷键命令,或按:输入命令行。
    • 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。
    • 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。
    • 替换模式:正常模式下,按R进入。

    2. 启动Vim

    • vim -c cmd file: 在打开文件前,先执行指定的命令;
    • vim -r file: 恢复上次异常退出的文件;
    • vim -R file: 以只读的方式打开文件,但可以强制保存;
    • vim -M file: 以只读的方式打开文件,不可以强制保存;
    • vim -y num file: 将编辑窗口的大小设为num行;
    • vim + file: 从文件的末尾开始;
    • vim +num file: 从第num行开始;
    • vim +/string file: 打开file,并将光标停留在第一个找到的string上。
    • vim –remote file: 用已有的vim进程打开指定的文件。 如果你不想启用多个vim会话,这个很有用。但要注意, 如果你用vim,会寻找名叫VIM的服务器;如果你已经有一个gvim在运行了, 你可以用gvim –remote file在已有的gvim中打开文件。

    3. 文档操作

    • :e file –关闭当前编辑的文件,并开启新的文件。 如果对当前文件的修改未保存,vi会警告。
    • :e! file –放弃对当前文件的修改,编辑新的文件。
    • :e+file – 开始新的文件,并从文件尾开始编辑。
    • :e+n file – 开始新的文件,并从第n行开始编辑。
    • :enew –编译一个未命名的新文档。(CTRL-W n)
    • :e – 重新加载当前文档。
    • :e! – 重新加载当前文档,并丢弃已做的改动。
    • :e#或ctrl+^ – 回到刚才编辑的文件,很实用。
    • :f或ctrl+g – 显示文档名,是否修改,和光标位置。
    • :f filename – 改变编辑的文件名,这时再保存相当于另存为。
    • gf – 打开以光标所在字符串为文件名的文件。
    • :w – 保存修改。
    • :n1,n2w filename – 选择性保存从某n1行到另n2行的内容。
    • :wq – 保存并退出。
    • ZZ – 保存并退出。
    • :x – 保存并退出。
    • :q[uit] ——退出当前窗口。(CTRL-W q或CTRL-W CTRL-Q)
    • :saveas newfilename – 另存为
    • :browse e – 会打开一个文件浏览器让你选择要编辑的文件。 如果是终端中,则会打开netrw的文件浏览窗口; 如果是gvim,则会打开一个图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令,如sp等。 用browse打开的起始目录可以由browsedir来设置:
      • :set browsedir=last – 用上次访问过的目录(默认);
      • :set browsedir=buffer – 用当前文件所在目录;
      • :set browsedir=current – 用当前工作目录;
    • :Sex – 水平分割一个窗口,浏览文件系统;
    • :Vex – 垂直分割一个窗口,浏览文件系统;

    4. 光标的移动

    4.1 基本移动

    以下移动都是在normal模式下。

    • h或退格: 左移一个字符;
    • l或空格: 右移一个字符;
    • j: 下移一行;
    • k: 上移一行;
    • gj: 移动到一段内的下一行;
    • gk: 移动到一段内的上一行;
    • +或Enter: 把光标移至下一行第一个非空白字符。
    • -: 把光标移至上一行第一个非空白字符。
    • w: 前移一个单词,光标停在下一个单词开头;
    • W: 移动下一个单词开头,但忽略一些标点;
    • e: 前移一个单词,光标停在下一个单词末尾;
    • E: 移动到下一个单词末尾,如果词尾有标点,则移动到标点;
    • b: 后移一个单词,光标停在上一个单词开头;
    • B: 移动到上一个单词开头,忽略一些标点;
    • ge: 后移一个单词,光标停在上一个单词末尾;
    • gE: 同 ge ,不过‘单词’包含单词相邻的标点。
    • (: 前移1句。
    • ): 后移1句。
    • {: 前移1段。
    • }: 后移1段。
    • fc: 把光标移到同一行的下一个c字符处
    • Fc: 把光标移到同一行的上一个c字符处
    • tc: 把光标移到同一行的下一个c字符前
    • Tc: 把光标移到同一行的上一个c字符后
    • ;: 配合f & t使用,重复一次
    • ,: 配合f & t使用,反向重复一次

    上面的操作都可以配合n使用,比如在正常模式(下面会讲到)下输入3h, 则光标向左移动3个字符。

    • 0: 移动到行首。
    • g0: 移到光标所在屏幕行行首。
    • ^: 移动到本行第一个非空白字符。
    • g^: 同 ^ ,但是移动到当前屏幕行第一个非空字符处。
    • :</li><listyle="liststyle:inherit!important">g:移动到行尾。</li><listyle="list−style:inherit!important">g: 移动光标所在屏幕行行尾。
    • n|: 把光标移到递n列上。
    • nG: 到文件第n行。
    • :n<cr> 移动到第n行。
    • :$<cr> 移动到最后一行。
    • H: 把光标移到屏幕最顶端一行。
    • M: 把光标移到屏幕中间一行。
    • L: 把光标移到屏幕最底端一行。
    • gg: 到文件头部。
    • G: 到文件尾部。

    4.2 翻屏

    • ctrl+f: 下翻一屏。
    • ctrl+b: 上翻一屏。
    • ctrl+d: 下翻半屏。
    • ctrl+u: 上翻半屏。
    • ctrl+e: 向下滚动一行。
    • ctrl+y: 向上滚动一行。
    • n%: 到文件n%的位置。
    • zz: 将当前行移动到屏幕中央。
    • zt: 将当前行移动到屏幕顶端。
    • zb: 将当前行移动到屏幕底端。

    4.3 标记

    使用标记可以快速移动。到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 后退 和 前进 。

    • m{a-z}: 标记光标所在位置,局部标记,只用于当前文件。
    • m{A-Z}: 标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
    • `{a-z}: 移动到标记位置。
    • ‘{a-z}: 移动到标记行的行首。
    • `{0-9}:回到上[2-10]次关闭vim时最后离开的位置。
    • “: 移动到上次编辑的位置。”也可以,不过“精确到列,而”精确到行 。如果想跳转到更老的位置,可以按C-o,跳转到更新的位置用C-i。
    • `”: 移动到上次离开的地方。
    • `.: 移动到最后改动的地方。
    • :marks 显示所有标记。
    • :delmarks a b – 删除标记a和b。
    • :delmarks a-c – 删除标记a、b和c。
    • :delmarks a c-f – 删除标记a、c、d、e、f。
    • :delmarks! – 删除当前缓冲区的所有标记。
    • :help mark-motions 查看更多关于mark的知识。

    5. 插入文本

    5.1 基本插入

    • i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+<esc>就插入了36个+组成的分割线。
    • I: 在当前行第一个非空字符前插入;
    • gI: 在当前行第一列插入;
    • a: 在光标后插入;
    • A: 在当前行最后插入;
    • o: 在下面新建一行插入;
    • O: 在上面新建一行插入;
    • :r filename在当前位置插入另一个文件的内容。
    • :[n]r filename在第n行插入另一个文件的内容。
    • :r !date 在光标处插入当前日期与时间。同理,:r !command可以将其它shell命令的输出插入当前文档。

    5.2 改写插入

    • c[n]w: 改写光标后1(n)个词。
    • c[n]l: 改写光标后n个字母。
    • c[n]h: 改写光标前n个字母。
    • [n]cc: 修改当前[n]行。
    • [n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
    • [n]S: 删除指定数目的行,并以所输入文本代替之。

    注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。

    6. 剪切复制和寄存器

    6.1 剪切和复制、粘贴

    • [n]x: 剪切光标右边n个字符,相当于d[n]l。
    • [n]X: 剪切光标左边n个字符,相当于d[n]h。
    • y: 复制在可视模式下选中的文本。
    • yy or Y: 复制整行文本。
    • y[n]w: 复制一(n)个词。
    • y[n]l: 复制光标右边1(n)个字符。
    • y[n]h: 复制光标左边1(n)个字符。
    • y: 从光标当前位置复制到行尾。</li><li style="list-style:inherit!important">y0: 从光标当前位置复制到行首。</li><li style="list-style:inherit!important">:m,ny&lt;cr&gt; 复制m行到n行的内容。</li><li style="list-style:inherit!important">y1G或ygg: 复制光标以上的所有行。</li><li style="list-style:inherit!important">yG: 复制光标以下的所有行。</li><li style="list-style:inherit!important">yaw和yas:复制一个词和复制一个句子,即使光标不在词首和句首也没关系。</li><li style="list-style:inherit!important">d: 删除(剪切)在可视模式下选中的文本。</li><li style="list-style:inherit!important">d: 从光标当前位置复制到行尾。</li><li style="list-style:inherit!important">y0: 从光标当前位置复制到行首。</li><li style="list-style:inherit!important">:m,ny&lt;cr&gt; 复制m行到n行的内容。</li><li style="list-style:inherit!important">y1G或ygg: 复制光标以上的所有行。</li><li style="list-style:inherit!important">yG: 复制光标以下的所有行。</li><li style="list-style:inherit!important">yaw和yas:复制一个词和复制一个句子,即使光标不在词首和句首也没关系。</li><li style="list-style:inherit!important">d: 删除(剪切)在可视模式下选中的文本。</li><li style="list-style:inherit!important">dor D: 删除(剪切)当前位置到行尾的内容。
    • d[n]w: 删除(剪切)1(n)个单词
    • d[n]l: 删除(剪切)光标右边1(n)个字符。
    • d[n]h: 删除(剪切)光标左边1(n)个字符。
    • d0: 删除(剪切)当前位置到行首的内容
    • [n] dd: 删除(剪切)1(n)行。
    • :m,nd<cr> 剪切m行到n行的内容。
    • d1G或dgg: 剪切光标以上的所有行。
    • dG: 剪切光标以下的所有行。
    • daw和das:剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
    • d/f<cr>:这是一个比较高级的组合命令,它将删除当前位置 到下一个f之间的内容。
    • p: 在光标之后粘贴。
    • P: 在光标之前粘贴。

    6.2 文本对象

    • aw:一个词
    • as:一句。
    • ap:一段。
    • ab:一块(包含在圆括号中的)。

    y, d, c, v都可以跟文本对象。

    6.3 寄存器

    • a-z:都可以用作寄存器名。”ayy把当前行的内容放入a寄存器。
    • A-Z:用大写字母索引寄存器,可以在寄存器中追加内容。 如”Ayy把当前行的内容追加到a寄存器中。
    • :reg 显示所有寄存器的内容。
    • “”:不加寄存器索引时,默认使用的寄存器。
    • “*:当前选择缓冲区,”*yy把当前行的内容放入当前选择缓冲区。
    • “+:系统剪贴板。”+yy把当前行的内容放入系统剪贴板。

    7. 查找与替换

    7.1 查找

    • /something: 在后面的文本中查找something。
    • ?something: 在前面的文本中查找something。
    • /pattern/+number: 将光标停在包含pattern的行后面第number行上。
    • /pattern/-number: 将光标停在包含pattern的行前面第number行上。
    • n: 向后查找下一个。
    • N: 向前查找下一个。
    可以用grep或vimgrep查找一个模式都在哪些地方出现过,
    其中:grep是调用外部的grep程序,而:vimgrep是vim自己的查找算法。
    用法为: :vim[grep]/pattern/[g] [j] files
    g的含义是如果一个模式在一行中多次出现,则这一行也在结果中多次出现。
    j的含义是grep结束后,结果停在第j项,默认是停在第一项。
    vimgrep前面可以加数字限定搜索结果的上限,如
    :1vim/pattern/ % 只查找那个模式在本文件中的第一个出现。
     
    其实vimgrep在读纯文本电子书时特别有用,可以生成导航的目录。
    比如电子书中每一节的标题形式为:n. xxxx。你就可以这样:
    :vim/^d{1,}./ %
    然后用:cw或:copen查看结果,可以用C-w H把quickfix窗口移到左侧,
    就更像个目录了。

    7.2 替换

    • :s/old/new - 用new替换当前行第一个old。
    • :s/old/new/g - 用new替换当前行所有的old。
    • :n1,n2s/old/new/g - 用new替换文件n1行到n2行所有的old。
    • :%s/old/new/g - 用new替换文件中所有的old。
    • :%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。
    • :%s//xxx/gxxx/xxx/g−在每一行的行尾插入xxx,表示行尾。
    • 所有替换命令末尾加上c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上i则忽略大小写(ignore)。
    还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令,
    语法为 :[range]g/pattern/command
    例如 :%g/^ xyz/normal dd。
    表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。

    关于range的规定为:

    • 如果不指定range,则表示当前行。
    • m,n: 从m行到n行。
    • 0: 最开始一行(可能是这样)。
    • $: 最后一行
    • .: 当前行
    • %: 所有行

    7.3 正则表达式

    高级的查找替换就要用到正则表达式。

    • \d: 表示十进制数(我猜的)
    • \s: 表示空格
    • \S: 非空字符
    • \a: 英文字母
    • \|: 表示 或
    • \.: 表示.
    • {m,n}: 表示m到n个字符。这要和 \s与\a等连用,如 \a\{m,n} 表示m 到n个英文字母。
    • {m,}: 表示m到无限多个字符。
    • **: 当前目录下的所有子目录。

    :help pattern得到更多帮助。


    8. 排版

    8.1 基本排版

    • << 向左缩进一个shiftwidth
    • >> 向右缩进一个shiftwidth
    • :ce(nter) 本行文字居中
    • :le(ft) 本行文字靠左
    • :ri(ght) 本行文字靠右
    • gq 对选中的文字重排,即对过长的文字进行断行
    • gqq 重排当前行
    • gqnq 重排n行
    • gqap 重排当前段
    • gqnap 重排n段
    • gqnj 重排当前行和下面n行
    • gqQ 重排当前段对文章末尾
    • J 拼接当前行和下一行
    • gJ 同 J ,不过合并后不留空格。

    8.2 拼写检查

    • :set spell-开启拼写检查功能
    • :set nospell-关闭拼写检查功能
    • ]s-移到下一个拼写错误的单词
    • [s-作用与上一命令类似,但它是从相反方向进行搜索
    • z=-显示一个有关拼写错误单词的列表,可从中选择
    • zg-告诉拼写检查器该单词是拼写正确的
    • zw-与上一命令相反,告诉拼写检查器该单词是拼写错误的

    8.3 统计字数

    g ^g可以统计文档字符数,行数。 将光标放在最后一个字符上,用字符数减去行数可以粗略统计中文文档的字数。 以上对 Mac 或 Unix 的文件格式适用。 如果是 Windows 文件格式(即换行符有两个字节),字数的统计方法为: 字符数 - 行数 * 2。


    9. 编辑多个文件

    9.1 一次编辑多个文件

    我们可以一次打开多个文件,如

    vi a.txt b.txt c.txt
    
    • 使用:next(:n)编辑下一个文件。
    • :2n 编辑下2个文件。
    • 使用:previous或:N编辑上一个文件。
    • 使用:wnext,保存当前文件,并编辑下一个文件。
    • 使用:wprevious,保存当前文件,并编辑上一个文件。
    • 使用:args 显示文件列表。
    • :n filenames或:args filenames 指定新的文件列表。
    • vi -o filenames 在水平分割的多个窗口中编辑多个文件。
    • vi -O filenames 在垂直分割的多个窗口中编辑多个文件。

    9.2 多标签编辑

    • vim -p files: 打开多个文件,每个文件占用一个标签页。
    • :tabe, tabnew – 如果加文件名,就在新的标签中打开这个文件, 否则打开一个空缓冲区。
    • ^w gf – 在新的标签页里打开光标下路径指定的文件。
    • :tabn – 切换到下一个标签。Control + PageDown,也可以。
    • :tabp – 切换到上一个标签。Control + PageUp,也可以。
    • [n] gt – 切换到下一个标签。如果前面加了 n , 就切换到第n个标签。第一个标签的序号就是1。
    • :tab split – 将当前缓冲区的内容在新页签中打开。
    • :tabc[lose] – 关闭当前的标签页。
    • :tabo[nly] – 关闭其它的标签页。
    • :tabs – 列出所有的标签页和它们包含的窗口。
    • :tabm[ove] [N] – 移动标签页,移动到第N个标签页之后。 如 tabm 0 当前标签页,就会变成第一个标签页。

    9.3 缓冲区

    • :buffers或:ls或:files 显示缓冲区列表。
    • ctrl+^:在最近两个缓冲区间切换。
    • :bn – 下一个缓冲区。
    • :bp – 上一个缓冲区。
    • :bl – 最后一个缓冲区。
    • :b[n]或:[n]b – 切换到第n个缓冲区。
    • :nbw(ipeout) – 彻底删除第n个缓冲区。
    • :nbd(elete) – 删除第n个缓冲区,并未真正删除,还在unlisted列表中。
    • :ba[ll] – 把所有的缓冲区在当前页中打开,每个缓冲区占一个窗口。

    10. 分屏编辑

    • vim -o file1 file2:水平分割窗口,同时打开file1和file2
    • vim -O file1 file2:垂直分割窗口,同时打开file1和file2

    10.1 水平分割

    • :split(:sp) – 把当前窗水平分割成两个窗口。(CTRL-W s 或 CTRL-W CTRL-S) 注意如果在终端下,CTRL-S可能会冻结终端,请按CTRL-Q继续。
    • :split filename – 水平分割窗口,并在新窗口中显示另一个文件。
    • :nsplit(:nsp) – 水平分割出一个n行高的窗口。
    • :[N]new – 水平分割出一个N行高的窗口,并编辑一个新文件。 (CTRL-W n或 CTRL-W CTRL-N)
    • ctrl+w f –水平分割出一个窗口,并在新窗口打开名称为光标所在词的文件 。
    • C-w C-^ – 水平分割一个窗口,打开刚才编辑的文件。

    10.2 垂直分割

    • :vsplit(:vsp) – 把当前窗口分割成水平分布的两个窗口。 (CTRL-W v或CTRL CTRL-V)
    • :[N]vne[w] – 垂直分割出一个新窗口。
    • :vertical 水平分割的命令: 相应的垂直分割。

    10.3 关闭子窗口

    • :qall – 关闭所有窗口,退出vim。
    • :wall – 保存所有修改过的窗口。
    • :only – 只保留当前窗口,关闭其它窗口。(CTRL-W o)
    • :close – 关闭当前窗口,CTRL-W c能实现同样的功能。 (象 :q :x同样工作 )

    10.4 调整窗口大小

    • ctrl+w + –当前窗口增高一行。也可以用n增高n行。
    • ctrl+w - –当前窗口减小一行。也可以用n减小n行。
    • ctrl+w _ –当前窗口扩展到尽可能的大。也可以用n设定行数。
    • :resize n – 当前窗口n行高。
    • ctrl+w = – 所有窗口同样高度。
    • n ctrl+w _ – 当前窗口的高度设定为n行。
    • ctrl+w < –当前窗口减少一列。也可以用n减少n列。
    • ctrl+w > –当前窗口增宽一列。也可以用n增宽n列。
    • ctrl+w | –当前窗口尽可能的宽。也可以用n设定列数。

    10.5 切换和移动窗口

    如果支持鼠标,切换和调整子窗口的大小就简单了。

    • ctrl+w ctrl+w: 切换到下一个窗口。或者是ctrl+w w。
    • ctrl+w p: 切换到前一个窗口。
    • ctrl+w h(l,j,k):切换到左(右,下,上)的窗口。
    • ctrl+w t(b):切换到最上(下)面的窗口。<BR>
    • ctrl+w H(L,K,J): 将当前窗口移动到最左(右、上、下)面。
    • ctrl+w r:旋转窗口的位置。
    • ctrl+w T: 将当前的窗口移动到新的标签页上。

    11. 快速编辑

    11.1 改变大小写

    • ~: 反转光标所在字符的大小写。
    • 可视模式下的U或u:把选中的文本变为大写或小写。
    • gu(U)接范围(如$,或G),可以把从光标当前位置到指定位置之间字母全部 转换成小写或大写。如ggguG,就是把开头到最后一行之间的字母全部变为小 写。再如gu5j,把当前行和下面四行全部变成小写。

    11.2 替换(normal模式)

    • r: 替换光标处的字符,同样支持汉字。
    • R: 进入替换模式,按esc回到正常模式。

    11.3 撤消与重做(normal模式)

    • [n] u: 取消一(n)个改动。
    • :undo 5 – 撤销5个改变。
    • :undolist – 你的撤销历史。
    • ctrl + r: 重做最后的改动。
    • U: 取消当前行中所有的改动。
    • :earlier 4m – 回到4分钟前
    • :later 55s – 前进55秒

    11.4 宏

    • . –重复上一个编辑动作
    • qa:开始录制宏a(键盘操作记录)
    • q:停止录制
    • @a:播放宏a

    12. 编辑特殊文件

    12.1 文件加解密

    • vim -x file: 开始编辑一个加密的文件。
    • :X – 为当前文件设置密码。
    • :set key= – 去除文件的密码。

    这里是 滇狐总结的比较高级的vi技巧。

    12.2 文件的编码

    • :e ++enc=utf8 filename, 让vim用utf-8的编码打开这个文件。
    • :w ++enc=gbk,不管当前文件什么编码,把它转存成gbk编码。
    • :set fenc或:set fileencoding,查看当前文件的编码。
    • 在vimrc中添加set fileencoding=ucs-bom,utf-8,cp936,vim会根据要打开的文件选择合适的编码。 注意:编码之间不要留空格。 cp936对应于gbk编码。 ucs-bom对应于windows下的文件格式。

    让vim 正确处理文件格式和文件编码,有赖于 ~/.vimrc的正确配置

    12.3 文件格式

    大致有三种文件格式:unix, dos, mac. 三种格式的区别主要在于回车键的编码:dos 下是回车加换行,unix 下只有 换行符,mac 下只有回车符。

    • :e ++ff=dos filename, 让vim用dos格式打开这个文件。
    • :w ++ff=mac filename, 以mac格式存储这个文件。
    • :set ff,显示当前文件的格式。
    • 在vimrc中添加set fileformats=unix,dos,mac,让vim自动识别文件格式。

    13. 编程辅助

    13.1 一些按键

    • gd: 跳转到局部变量的定义处;
    • gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;
    • g;: 上一个修改过的地方;
    • g,: 下一个修改过的地方;
    • [[: 跳转到上一个函数块开始,需要有单独一行的{。
    • ]]: 跳转到下一个函数块开始,需要有单独一行的{。
    • []: 跳转到上一个函数块结束,需要有单独一行的}。
    • ][: 跳转到下一个函数块结束,需要有单独一行的}。
    • [{: 跳转到当前块开始处;
    • ]}: 跳转到当前块结束处;
    • [/: 跳转到当前注释块开始处;
    • ]/: 跳转到当前注释块结束处;
    • %: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。

    下面的括号匹配对编程很实用的。

    • ci’, di’, yi’:修改、剪切或复制’之间的内容。
    • ca’, da’, ya’:修改、剪切或复制’之间的内容,包含’。
    • ci”, di”, yi”:修改、剪切或复制”之间的内容。
    • ca”, da”, ya”:修改、剪切或复制”之间的内容,包含”。
    • ci(, di(, yi(:修改、剪切或复制()之间的内容。
    • ca(, da(, ya(:修改、剪切或复制()之间的内容,包含()。
    • ci[, di[, yi[:修改、剪切或复制[]之间的内容。
    • ca[, da[, ya[:修改、剪切或复制[]之间的内容,包含[]。
    • ci{, di{, yi{:修改、剪切或复制{}之间的内容。
    • ca{, da{, ya{:修改、剪切或复制{}之间的内容,包含{}。
    • ci<, di<, yi<:修改、剪切或复制<>之间的内容。
    • ca<, da<, ya<:修改、剪切或复制<>之间的内容,包含<>。

    13.2 ctags

    • ctags -R: 生成tag文件,-R表示也为子目录中的文件生成tags
    • :set tags=path/tags – 告诉ctags使用哪个tag文件
    • :tag xyz – 跳到xyz的定义处,或者将光标放在xyz上按C-],返回用C-t
    • :stag xyz – 用分割的窗口显示xyz的定义,或者C-w ], 如果用C-w n ],就会打开一个n行高的窗口
    • :ptag xyz – 在预览窗口中打开xyz的定义,热键是C-w }。
    • :pclose – 关闭预览窗口。热键是C-w z。
    • :pedit abc.h – 在预览窗口中编辑abc.h
    • :psearch abc – 搜索当前文件和当前文件include的文件,显示包含abc的行。

    有时一个tag可能有多个匹配,如函数重载,一个函数名就会有多个匹配。 这种情况会先跳转到第一个匹配处。

    • :[n]tnext – 下一[n]个匹配。
    • :[n]tprev – 上一[n]个匹配。
    • :tfirst – 第一个匹配
    • :tlast – 最后一个匹配
    • :tselect tagname – 打开选择列表

    tab键补齐

    • :tag xyz<tab> – 补齐以xyz开头的tag名,继续按tab键,会显示其他的。
    • :tag /xyz<tab> – 会用名字中含有xyz的tag名补全。

    13.3 cscope

    • cscope -Rbq: 生成cscope.out文件
    • :cs add /path/to/cscope.out /your/work/dir
    • :cs find c func – 查找func在哪些地方被调用
    • :cw – 打开quickfix窗口查看结果

    13.4 gtags

    Gtags综合了ctags和cscope的功能。 使用Gtags之前,你需要安装GNU Gtags。 然后在工程目录运行 gtags 。

    • :Gtags funcname 定位到 funcname 的定义处。
    • :Gtags -r funcname 查询 funcname被引用的地方。
    • :Gtags -s symbol 定位 symbol 出现的地方。
    • :Gtags -g string Goto string 出现的地方。 :Gtags -gi string 忽略大小写。
    • :Gtags -f filename 显示 filename 中的函数列表。 你可以用 :Gtags -f % 显示当前文件。
    • :Gtags -P pattern 显示路径中包含特定模式的文件。 如 :Gtags -P .h$ 显示所有头文件, :Gtags -P /vm/ 显示vm目录下的文件。

    13.5 编译

    vim提供了:make来编译程序,默认调用的是make, 如果你当前目录下有makefile,简单地:make即可。

    如果你没有make程序,你可以通过配置makeprg选项来更改make调用的程序。 如果你只有一个abc.Java文件,你可以这样设置:

    set makeprg=javac\ abc.java
    

    然后:make即可。如果程序有错,可以通过quickfix窗口查看错误。 不过如果要正确定位错误,需要设置好errorformat,让vim识别错误信息。 如:

    :setl efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#
    

    %f表示文件名,%l表示行号, %m表示错误信息,其它的还不能理解。 请参考 :help errorformat。

    13.6 快速修改窗口

    其实是quickfix插件提供的功能, 对编译调试程序非常有用 :)

    • :copen – 打开快速修改窗口。
    • :cclose – 关闭快速修改窗口。

    快速修改窗口在make程序时非常有用,当make之后:

    • :cl – 在快速修改窗口中列出错误。
    • :cn – 定位到下一个错误。
    • :cp – 定位到上一个错误。
    • :cr – 定位到第一个错误。

    13.7 自动补全

    • C-x C-s – 拼写建议。
    • C-x C-v – 补全vim选项和命令。
    • C-x C-l – 整行补全。
    • C-x C-f – 自动补全文件路径。弹出菜单后,按C-f循环选择,当然也可以按 C-n和C-p。
    • C-x C-p 和C-x C-n – 用文档中出现过的单词补全当前的词。 直接按C-p和C-n也可以。
    • C-x C-o – 编程时可以补全关键字和函数名啊。
    • C-x C-i – 根据头文件内关键字补全。
    • C-x C-d – 补全宏定义。
    • C-x C-n – 按缓冲区中出现过的关键字补全。 直接按C-n或C-p即可。

    当弹出补全菜单后:

    • C-p 向前切换成员;
    • C-n 向后切换成员;
    • C-e 退出下拉菜单,并退回到原来录入的文字;
    • C-y 退出下拉菜单,并接受当前选项。

    13.8 多行缩进缩出

    • 正常模式下,按两下>;光标所在行会缩进。
    • 如果先按了n,再按两下>;,光标以下的n行会缩进。
    • 对应的,按两下<;,光标所在行会缩出。
    • 如果在编辑代码文件,可以用=进行调整。
    • 在可视模式下,选择要调整的代码块,按=,代码会按书写规则缩排好。
    • 或者n =,调整n行代码的缩排。

    13.9 折叠

    • zf – 创建折叠的命令,可以在一个可视区域上使用该命令;
    • zd – 删除当前行的折叠;
    • zD – 删除当前行的折叠;
    • zfap – 折叠光标所在的段;
    • zo – 打开折叠的文本;
    • zc – 收起折叠;
    • za – 打开/关闭当前折叠;
    • zr – 打开嵌套的折行;
    • zm – 收起嵌套的折行;
    • zR (zO) – 打开所有折行;
    • zM (zC) – 收起所有折行;
    • zj – 跳到下一个折叠处;
    • zk – 跳到上一个折叠处;
    • zi – enable/disable fold;

    14. 命令行

    normal模式下按:进入命令行模式

    14.1 命令行模式下的快捷键:

    • 上下方向键:上一条或者下一条命令。如果已经输入了部分命令,则找上一 条或者下一条匹配的命令。
    • 左右方向键:左/右移一个字符。
    • C-w: 向前删除一个单词。
    • C-h: 向前删除一个字符,等同于Backspace。
    • C-u: 从当前位置移动到命令行开头。
    • C-b: 移动到命令行开头。
    • C-e: 移动到命令行末尾。
    • Shift-Left: 左移一个单词。
    • Shift-Right: 右移一个单词。
    • @: 重复上一次的冒号命令。
    • q: 正常模式下,q然后按’:’,打开命令行历史缓冲区, 可以像编辑文件一样编辑命令。
    • q/和q? 可以打开查找历史记录。

    14.2 执行外部命令

    • :! cmd 执行外部命令。
    • :!! 执行上一次的外部命令。
    • :sh 调用shell,用exit返回vim。
    • :r !cmd 将命令的返回结果插入文件当前位置。
    • :m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。

    15. 其它

    15.1 工作目录

    • :pwd 显示vim的工作目录。
    • :cd path 改变vim的工作目录。
    • :set autochdir 可以让vim 根据编辑的文件自动切换工作目录。

    15.2 一些快捷键(收集中)

    • K: 打开光标所在词的manpage。
    • *: 向下搜索光标所在词。
    • g*: 同上,但部分符合即可。
    • #: 向上搜索光标所在词。
    • g#: 同上,但部分符合即可。
    • g C-g: 统计全文或统计部分的字数。

    15.3 在线帮助

    • :h(elp)或F1 打开总的帮助。
    • :help user-manual 打开用户手册。
    • 命令帮助的格式为:第一行指明怎么使用那个命令; 然后是缩进的一段解释这个命令的作用,然后是进一步的信息。
    • :helptags somepath 为somepath中的文档生成索引。
    • :helpgrep 可以搜索整个帮助文档,匹配的列表显示在quickfix窗口中。
    • Ctrl+] 跳转到tag主题,Ctrl+t 跳回。
    • :ver 显示版本信息。

    15.4 一些小功能

    • 简单计算器: 在插入模式下,输入C-r =,然后输入表达式,就能在 光标处得到计算结果。
    展开全文
  • Vim简明教程【CoolShell】

    万次阅读 多人点赞 2012-11-30 08:31:24
    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手...


    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。

    ——————————正文开始——————————

    你想以最快的速度学习人类史上最好的文本编辑器VIM吗?你先得懂得如何在VIM幸存下来,然后一点一点地学习各种戏法。

    Vim the Six Billion Dollar editor

    Better, Stronger, Faster.

    学习 vim 并且其会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。

    我建议下面这四个步骤:

    1. 存活
    2. 感觉良好
    3. 觉得更好,更强,更快
    4. 使用VIM的超能力

    当你走完这篇文章,你会成为一个vim的 superstar。

    在开始学习以前,我需要给你一些警告:

    • 学习vim在开始时是痛苦的。
    • 需要时间
    • 需要不断地练习,就像你学习一个乐器一样。
    • 不要期望你能在3天内把vim练得比别的编辑器更有效率。
    • 事实上,你需要2周时间的苦练,而不是3天。

    第一级 – 存活

    1. 安装 vim
    2. 启动 vim
    3. 什么也别干!请先阅读

    当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子。但vim不是这样的,请按照下面的命令操作:

    • 启 动Vim后,vim在 Normal 模式下。
    • 让我们进入 Insert 模式,请按下键 i 。(陈皓注:你会看到vim左下角有一个–insert–字样,表示,你可以以插入的方式输入了)
    • 此时,你可以输入文本了,就像你用“记事本”一样。
    • 如果你想返回 Normal 模式,请按 ESC 键。

    现在,你知道如何在 Insert 和 Normal 模式下切换了。下面是一些命令,可以让你在 Normal 模式下幸存下来:

    • i → Insert 模式,按 ESC 回到 Normal 模式.
    • x → 删当前光标所在的一个字符。
    • :wq → 存盘 + 退出 (:w 存盘, :q 退出)   (陈皓注::w 后可以跟文件名)
    • dd → 删除当前行,并把删除的行存到剪贴板里
    • p → 粘贴剪贴板

    推荐:

    • hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头。
    • :help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(陈皓注:退出帮助需要输入:q)

    你能在vim幸存下来只需要上述的那5个命令,你就可以编辑文本了,你一定要把这些命令练成一种下意识的状态。于是你就可以开始进阶到第二级了。

    当是,在你进入第二级时,需要再说一下 Normal 模式。在一般的编辑器下,当你需要copy一段文字的时候,你需要使用 Ctrl 键,比如:Ctrl-C。也就是说,Ctrl键就好像功能键一样,当你按下了功能键Ctrl后,C就不在是C了,而且就是一个命令或是一个快键键了,在VIM的Normal模式下,所有的键就是功能键了。这个你需要知道。

    标记:

    • 下面的文字中,如果是 Ctrl-λ我会写成 <C-λ>.
    • 以 : 开始的命令你需要输入 <enter>回车,例如 — 如果我写成 :q 也就是说你要输入 :q<enter>.

    第二级 – 感觉良好

    上面的那些命令只能让你存活下来,现在是时候学习一些更多的命令了,下面是我的建议:(陈皓注:所有的命令都需要在Normal模式下使用,如果你不知道现在在什么样的模式,你就狂按几次ESC键)

    1. 各种插入模式
      • a → 在光标后插入
      • o → 在当前行后插入一个新行
      • O → 在当前行前插入一个新行
      • cw → 替换从光标所在位置后到一个单词结尾的字符
    2. 简单的移动光标
      • 0 → 数字零,到行头
      • ^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
      • $ → 到本行行尾
      • g_ → 到本行最后一个不是blank字符的位置。
      • /pattern → 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)
    3. 拷贝/粘贴 (陈皓注:p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)
      • P → 粘贴
      • yy → 拷贝当前行当行于 ddP
    4. Undo/Redo
      • u → undo
      • <C-r> → redo
    5. 打开/保存/退出/改变文件(Buffer)
      • :e <path/to/file> → 打开一个文件
      • :w → 存盘
      • :saveas <path/to/file> → 另存为 <path/to/file>
      • :x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
      • :q! → 退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
      • :bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)

    花点时间熟悉一下上面的命令,一旦你掌握他们了,你就几乎可以干其它编辑器都能干的事了。但是到现在为止,你还是觉得使用vim还是有点笨拙,不过没关系,你可以进阶到第三级了。

    第三级 – 更好,更强,更快

    先恭喜你!你干的很不错。我们可以开始一些更为有趣的事了。在第三级,我们只谈那些和vi可以兼容的命令。

    更好

    下面,让我们看一下vim是怎么重复自己的:

    1. . → (小数点) 可以重复上一次的命令
    2. N<command> → 重复某个命令N次

    下面是一个示例,找开一个文件你可以试试下面的命令:

    • 2dd → 删除2行
    • 3p → 粘贴文本3次
    • 100idesu [ESC] → 会写下 “desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu desu “
    • . → 重复上一个命令—— 100 “desu “.
    • 3. → 重复 3 次 “desu” (注意:不是 300,你看,VIM多聪明啊).
    更强

    你要让你的光标移动更有效率,你一定要了解下面的这些命令,千万别跳过

    1. NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
    2. gg → 到第一行。(陈皓注:相当于1G,或 :1)
    3. G → 到最后一行。
    4. 按单词移动:
      1. w → 到下一个单词的开头。
      2. e → 到下一个单词的结尾。

      > 如果你认为单词是由默认方式,那么就用小写的e和w。默认上来说,一个单词由字母,数字和下划线组成(陈皓注:程序变量)

      > 如果你认为单词是由blank字符分隔符,那么你需要使用大写的E和W。(陈皓注:程序语句)

      Word moves example

    下面,让我来说说最强的光标移动:

    • % : 匹配括号移动,包括 ({[. (陈皓注:你需要把光标先移到括号上)
    • * 和 #:  匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)

    相信我,上面这三个命令对程序员来说是相当强大的。

    更快

    你一定要记住光标的移动,因为很多命令都可以和这些移动光标的命令连动。很多命令都可以如下来干:

    <start position><command><end position>

    例如 0y$ 命令意味着:

    • 0 → 先到行头
    • y → 从这里开始拷贝
    • $ → 拷贝到本行最后一个字符

    你可可以输入 ye,从当前位置拷贝到本单词的最后一个字符。

    你也可以输入 y2/foo 来拷贝2个 “foo” 之间的字符串。

    还有很多时间并不一定你就一定要按y才会拷贝,下面的命令也会被拷贝:

    • d (删除 )
    • v (可视化的选择)
    • gU (变大写)
    • gu (变小写)
    • 等等
    (陈皓注:可视化选择是一个很有意思的命令,你可以先按v,然后移动光标,你就会看到文本被选择,然后,你可能d,也可y,也可以变大写等)

    第四级 – Vim 超能力

    你只需要掌握前面的命令,你就可以很舒服的使用VIM了。但是,现在,我们向你介绍的是VIM杀手级的功能。下面这些功能是我只用vim的原因。

    在当前行上移动光标: 0 ^ $ f F t T , ;
    • 0 → 到行头
    • ^ → 到本行的第一个非blank字符
    • $ → 到行尾
    • g_ → 到本行最后一个不是blank字符的位置。
    • fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
    • t, → 到逗号前的第一个字符。逗号可以变成其它字符。
    • 3fa → 在当前行查找第三个出现的a。
    • F 和 T → 和 f 和 t 一样,只不过是相反方向。
      Line moves

    还有一个很有用的命令是 dt" → 删除所有的内容,直到遇到双引号—— "。

    区域选择 <action>a<object> 或 <action>i<object>

    在visual 模式下,这些命令很强大,其命令格式为

    <action>a<object> 和 <action>i<object>

    • action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
    • object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。

    假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 的位置。

    • vi" → 会选择 foo.
    • va" → 会选择 "foo".
    • vi) → 会选择 "foo".
    • va) → 会选择("foo").
    • v2i) → 会选择 map (+) ("foo")
    • v2a) → 会选择 (map (+) ("foo"))

    Text objects selection

    块操作: <C-v>

    块操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]

    • ^ → 到行头
    • <C-v> → 开始块操作
    • <C-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
    • I-- [ESC] → I是插入,插入“--”,按ESC键来为每一行生效。

    Rectangular blocks

    在Windows下的vim,你需要使用 <C-q> 而不是 <C-v> ,<C-v> 是拷贝剪贴板。

    自动提示: <C-n> 和 <C-p>

    在 Insert 模式下,你可以输入一个词的开头,然后按 <C-p>或是<C-n>,自动补齐功能就出现了……

    Completion

    宏录制: qa 操作序列 q@a@@
    • qa 把你的操作记录在寄存器 a。
    • 于是 @a 会replay被录制的宏。
    • @@ 是一个快捷键用来replay最新录制的宏。

    示例

    在一个只有一行且这一行只有“1”的文本中,键入如下命令:

    • qaYp<C-a>q
      • qa 开始录制
      • Yp 复制行.
      • <C-a> 增加1.
      • q 停止录制.
    • @a → 在1下面写下 2
    • @@ → 在2 正面写下3
    • 现在做 100@@ 会创建新的100行,并把数据增加到 103.

    Macros

    可视化选择: v,V,<C-v>

    前面,我们看到了 <C-v>的示例 (在Windows下应该是<C-q>),我们可以使用 v 和 V。一但被选好了,你可以做下面的事:

    • J → 把所有的行连接起来(变成一行)
    • < 或 > → 左右缩进
    • = → 自动给缩进 (陈皓注:这个功能相当强大,我太喜欢了)

    Autoindent

    在所有被选择的行后加上点东西:

    • <C-v>
    • 选中相关的行 (可使用 j 或 <C-d> 或是 /pattern 或是 % 等……)
    • $ 到行最后
    • A, 输入字符串,按 ESC。

    Append to many lines

    分屏: :split 和 vsplit.

    下面是主要的命令,你可以使用VIM的帮助 :help split. 你可以参考本站以前的一篇文章VIM分屏

    • :split → 创建分屏 (:vsplit创建垂直分屏)
    • <C-w><dir> : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。
    • <C-w>_ (或 <C-w>|) : 最大化尺寸 (<C-w>| 垂直分屏)
    • <C-w>+ (或 <C-w>-) : 增加尺寸

    Split

    结束语

    • 上面是作者最常用的90%的命令。
    • 我建议你每天都学1到2个新的命令。
    • 在两到三周后,你会感到vim的强大的。
    • 有时候,学习VIM就像是在死背一些东西。
    • 幸运的是,vim有很多很不错的工具和优秀的文档。
    • 运行vimtutor直到你熟悉了那些基本命令。
    • 其在线帮助文档中你应该要仔细阅读的是 :help usr_02.txt.
    • 你会学习到诸如  !, 目录,寄存器,插件等很多其它的功能。

    学习vim就像学弹钢琴一样,一旦学会,受益无穷。

    ——————————正文结束——————————

    对于vi/vim只是点评一点:这是一个你不需要使用鼠标,不需使用小键盘,只需要使用大键盘就可以完成很多复杂功能文本编辑的编辑器。不然,Visual Studio也不就会有vim的插件了

    (全文完)

    展开全文
  • linux 下vim的使用(学习必看!!重要)

    万次阅读 多人点赞 2017-10-12 20:49:06
    vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及Linux系统的任何版本,...

    vi与vim
    vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。
    vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;
    因为程序简单,编辑速度相当快速。
    vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。
    vim会依据文件扩展名或者是文件内的开头信息, 判断该文件的内容而自动的执行该程序的语法判断式,再以颜色来显示程序代码与一般信息。
    vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。


     

    为何要学 vi
    所有的Unix Like系统都会内建vi文本编辑器,其他的文本编辑器则不一定会存在;
    一些软件的编辑接口会主动调用vi (例如 crontab, visudo, edquota 等命令);

    vi的使用
    基本上vi可以分为三种状态,分别是一般模式、编辑模式和命令行模式,各模式的功能区分如下:

    一般模式:
    以vi打开一个文件就直接进入一般模式了(这是默认的模式)。在这个模式中, 你可以使用上下左右按键来移动光标,你可以使用删除字符或删除整行来处理文件内容, 也可以使用复制、粘贴来处理你的文件数据。

    编辑模式:
    在一般模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容,只有当到你按下【i, I, o, O, a, A, r, R】等任何一个字母之后才会进入编辑模式。这时候屏幕的左下方会出现【INSERT或 REPLACE】的字样,此时才可以进行编辑。而如果要回到一般模式时, 则必须要按下【Esc】即可退出编辑模式。

    命令行模式:
    输入【 : / ? 】三个中的任何一个,就可以将光标移动到最底下那一行。在这个模式中, 可以提供查找、读取、存盘、替换字符、离开vi、显示行号等的动作则是在此模式中完成的!

    一般模式可用的按钮说明
    移动光标
    【h、j、k、l】,分别控制光标左、下、上、右移一格
    按【ctrl+b】屏幕往"后"移动一页
    按【ctrl+f】屏幕往"前"移动一页

    【n<space>】光标向右移动n个字符
    【Home】移动到这一行的最前面字符处:0数字,但不能用数字小键盘上的数字
    【End】 移动到这一行的最后面字符处:$,我测试好像不行
    【w】光标跳到下个字的开头
    【e】光标跳到下个字的字尾

    【H】 光标移动到这个屏幕的最上方那一行的第一个字符
    【M】 光标移动到这个屏幕的中间那一行的第一个字符
    【L】光标移动到这个屏幕的最下方那一行的第一个字符

    【G】 移动到这个文件的最后一行
    【nG】移动到这个文件的第n行(可配合:set nu)
    【gg】 移动到这个文件的第一行,相当于1G
    【n<Enter>】光标向下移动n行

    查找与替换
    【/word】 向光标向下寻找一个名称为word的字符串
    【?word】 向光标向上寻找一个名称为word的字符串
    【n】 代表重复前一个查找的动作
    【N】 与n刚好相反,为【反向】进行行前一个查找动作

    【:n1,n2s/word1/word2/g】  n1与n2为数字,在第n1与n2行之间查找word1 这个字符串,并将该字符串替换为word2

    【:1,$s/word1/word2/g】 从第一行到最后一行查找word1字符串,并将该字符串替换为word2
    【:1,$s/word1/word2/gc】 从第一行到最后一行查找word1字符串,并将该字符串替换为word2 ,且在替换前提示用户确认是否进行替换

    删除、复制与粘贴

    【x】 为向后删除一个字符 (相当于【del】键)
    【X】 为向前删除一个字符(相当于【backspace】键)
    【nx】 连续向后删除n个字符

    【dd】 删除光标所在行
    【ndd】 删除光标所在的向下n行
    【d1G】 删除光标所在行到第一行的所有数据
    【dG】 删除光标所在到最后一行的所有数据

    【d$】 删除光标所在处,到该行的最后一个字符
    【d0】 删除光标所在处,到该行的最前一个字符

    【yy】 复制光标所在的那一行
    【nyy】 复制光标所在的向下n列

    【y1G】 复制光标所在行到第一行的所有数据
    【yG】 复制光标所在行到最后一行的所有数据

    【y0】 复制光标所在的那个字符到该行行首的所有数据
    【y$】 复制光标所在的那个字符到该行行尾的所有数据

    【p】将已复制的数据在光标下一行粘贴上
    【P】 则为贴在光标的上一行

    【u】 恢复前一个操作
    【Ctrl+r】重做上一个操作

    【.】 是重复前一个操作

    一般模式切换到编辑模式的可用的按钮说明
    【i, I】 进入编辑模式:
    i 为【从目前光标所在处插入】
    I 为【在目前所在行的第一个非空格符处开始插入】
     
    【a, A】 进入编辑模式(Insert mode):
    a 为【从目前光标所在的下一个字符处开始插入】
    A 为【从光标所在行的最后一个字符处开始插入】

    【o, O】 进入编辑模式:
    o 为【在目前光标所在的下一行处插入新的一行】
    O 为在目前光标所在处的上一行插入新的一行

    【r, R】 进入取代模式:
    r 只会取代光标所在的那一个字符一次
    R会一直取代光标所在的文字,直到按下 ESC 为止;

    【Esc】 退出编辑模式,回到一般模式

    一般模式切换到命令行模式可用的按钮说明
    【:w】 保存编辑的内容
    【:w!】强制写入该文件,但跟你对该文件的权限有关
    【:q】 离开vi
    【:q!】 不想保存修改强制离开
    【:wq】 保存后离开
    【:x】 保存后离开
    【ZZ】 若文件没有更动,则不保存离开,若文件已经被更改过,则保存后离开

    【:w filename】 将编辑的数据保存成另一个文件(类似另存)
    【:r filename】 在编辑的数据中,读入另一个文件的数据。即将【filename】 这个文件的内容加到光标所在行后面。

    【:n1,n2 w filename】 将n1到n2的内容保存成filename这个文件。
    【:! command】暂时离开vi 到命令行模式下执行command的显示结果!例如 【:! ls /home】即可在 vi 当中察看/home底下以ls输出的文件信息!

    【:set nu】 显示行号
    【:set nonu】 与 set nu 相反,为取消行

    vim的缓存文件、恢复与开启时的警告信息
    我们知道一些常用的编辑软件,都有个恢复的功能,就是说当你的系统因为某些原因而导致类似当机的情况时,还可以利用这个恢复功能将之前未保存的数据找回来。我们的VIM也有这个功能。

    当我们在使用vim编辑时,vim会在与被编辑的文件的目录下,再建立一个名为 .filename.swp的文件。如果你的系统因为某些原因断线了, 导致你编辑的文件还没有保存,这个时候 .filenam.swp 就能够发会救援的功能了。

    我们来演示一下
    vim man.config
    ctrl+z放到后台执行
    我们停止VI的进程
    一种方法
    ps aux |grep vi
    kill -9 n

    另外一种方法
    jobs
    kill -9 %1

    我们用ls -l 命令来查看一下目录里面,会发现有个.man.config.swp的文件,这个文件就是个缓存的文件

    我们再来编辑
    vim man.config
    这时候会出现一些信息
    问题一:可能有其他人或程序同时在编辑这个文件:
    问题二:在前一个vim的环境中,可能因为某些不知名原因导致vim中断 (crashed):

    右下角会出现六个命令项,其作用说明如下:
    (O)pen Read-Only:打开此文件成为只读档, 可以用在你只是想要查阅该文件内容并不想要进行编辑行为时。一般来说,在上课时,如果你是登入到同学的计算机去看他的配置文件, 结果发现其实同学他自己也在编辑时,可以使用这个模式;
    (E)dit anyway:还是用正常的方式打开你要编辑的那个文件, 并不会载入暂存盘的内容。如果说两个人都在编辑这个文件的话,很容易出现互相改变对方的文件等问题。
    (R)ecover:就是加载暂存盘的内容,用在你要救回之前未保存的工作。 不过当你救回来并且储存离开vim后,还是要手动自行删除那个暂存档。
    (D)elete it:你确定那个暂存档是无用的!那么开启文件前会先将这个暂存盘删除
    (Q)uit:按下 q 就离开vim,不会进行任何动作回到命令提示字符。
    (A)bort:忽略这个编辑行为,感觉上与 quit 非常类似!

    vim的功能
    其实,目前大部分的Linux发行版本都以vim取代了vi。为什么要用vim呢?因为vim具有颜色显示的功能,并且还支持许多的程序语法(syntax)和相应的提示信息。查看自己的VI是不是被VIM代替,可以用
    alias这个命令来查看是不是有alias vi=’vim’这一行。

    块选择
    【v】字符选择,会将光标经过的地方反白选择
    【V】 行选择,会将光标经过的行反白选择
    【Ctrl+v】 块选择,可以用长方形的方式选择资料 (提制竖列)
    【y】 将反白的地方复制
    【d】 将反白的地方删除

    多文件编辑
    大家在使用vim的时候,可能会碰到你需要复制一个文件中的某段到另外一个文件中,而vim不能够在关闭的时候,把这段保留住。或者是用其它的方法复制。
    【vim file1 file2】

    【:n】编辑下一个文件
    【:N】编辑上一个文件
    【:files】列出目前这个vim编辑的所有文件

    多窗口功能
    有两个需要对照着看的文件
    【:sp filename】开启一个新窗口,如果有加 filename, 表示在新窗口开启一个新文件,否则表示两个窗口为同一个文件内容(同步显示)。

    【ctrl+w+j】
    【ctrl+w+↓】按键的按法是:先按下 【ctrl】 不放, 再按下 w 后放开所有的按键,然后再按下 j (或向下箭头键),则光标可移动到下方的窗口。

    【ctrl+w+k】
    【ctrl+w+↑】同上,不过光标移动到上面的窗口。

    vim 环境设定与记录(~/.vimrc, ~/.viminfo)
    如果我们以vim软件来查找一个文件内部的某个字符串时,这个字符串会被反白, 而下次我们再次以vim编辑这个文件时,该查找的字符串反白情况还是存在。另外,当我们重复编辑同一个文件时,当第二次进入该文件时, 光标竟然就在上次离开的那一行的开头。这个功能可能是方便,但也有不方便的时候。怎么会这样呢?这是因为我们的vim会主动的将你曾经做过的行为登录下来,那个记录动作的文件就是: ~/.viminfo,不想用这个功能,就直接删除~/.viminfo。只要你曾经使用过vim,那么你的家目录就会有这个文件。这个文件是自动产生的,你在vim里头所做过的动作,就可以在这个文件内部找到。有兴趣的朋友可以自己查看文件里面的内容。

    不过,对于每个不同的发行版本对vim的预设环境都不太相同。举例来说,某些版本在查找到关键词时并不会高亮度反白, 有些版本则会主动的帮你进行缩排(所谓的缩排,就是当你按下 Enter 编辑新的一行时,光标不会在行首,而是在与上一行的第一个非空格符处对齐)的行为。其实这些都可以自行设定的,下面我们就来看看vim的环境设定。
    vim的环境设定参数有很多,如果你想要知道目前的设定值,可以在一般模式时输入【 :set all】来查阅,由于设定项目实在太多了,我们在这里就仅列出一些平时比较常用的一些简单的设定值,给大家提供参考。

    :set all "显示目前所有的环境参数设定值
    :set hlsearch "高亮度反白(高亮度搜寻)
    :set nohlsearch "取消高亮度反白(高亮度搜寻)
    :set backspace=2 "在编辑的时候可随时用退格键删除 (0、1的时候,只针对刚输入的字符有效)
    :set autoindent "自动缩排
    :set noautoindent "取消自动缩排
    :set ruler "可显示最后一行的状态
    :set showmode "左下角那一行的状态
    :set nu "显示行号
    :set nonu "取消行号
    :set bg=dark "显示不同的底色色调
    :syntax on "进行语法检验,颜色显示
    :syntax off "关闭语法检验

    了解完上面的内容后,下面我们就能写一下自己的vim操作环境。
    整体vim的设定值一般是置在/etc/vimrc这个文件里面,不建议大家来修改他。我们在自己的家目录里面建立个.vimrc文件,在这里面写入自己的内容就能实现了。
    [root@yufei ~]# vim ~/.vimrc
    内容如下
    set hlsearch "高亮度反白
    set backspace=2 "可随时用退格键删除
    set autoindent "自动缩排
    set ruler "可显示最后一行的状态
    set showmode "左下角那一行的状态
    set nu "可以在每一行的最前面显示行号
    set bg=dark "显示不同的底色色调
    syntax on "进行语法检验,颜色显示
    "这个文件的双引号 (")表示的是注释

    保存退出vim后,在下次使用vim的时候,就会有自己的vim操作环境了。
    提醒一点,这个文件中每一行前面加不加【:】效果都是一样的。

    最后,给也几张不错的图,帮助大家更快的来掌握vi/vim,记住一点,不要死记,重在操作


     

    linux vim编辑器必知必会

    一、我们为什么要学习vim编辑器?

    Linux的命令行界面下面有非常多的文本编辑器。比如经常听说的就有Emacs、pico、nano、joe与vim等。vim可以看做是vi的高级版。我们为什么一定要学习vim呢?有以下几个原因:

    (1)所有的Unix like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在。

    (2)很多软件的编辑接口都会主动调用vi。

    (3)vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计。

    (4)程序简单,编辑速度快。


    二、下面先介绍一下vi的基本使用方法及其相关命令。

    vim编辑器的三种模式:一般模式、编辑模式和命令行模式。

    在一般模式中可以进行删除、复制和粘贴的功能,但是无法编辑文件内容。从一般模式切换到编辑模式可以按下iIoOaArR键。按下Esc键可以回到一般模式。在一般模式中输入:/、?三个中的任意一个可以将光标移到最下面的一行。在这个模式中可以提供查找数据的操作,而读取、保存、大量替换字符、离开vii、显示行号等操作则是在此模式中完成的。需要注意的是,编辑模式与命令行模式之间是不能互相切换的。

    下面列出平时用的最多的vi命令:

    移动光标的方法:

    [Ctrl]+[f]:屏幕向下移动一页,相当于[PageDown]按键。

    [Ctrl]+[b]:屏幕向上移动一页,相当于[PageUp]按键。

    0或功能键[Home]:移动到这一行的最前面字符处。

    $或功能键[End]:移动到这一行的最后面字符处。

    G:移动到这个文件的最后一行。

    gg:移动到这个文件的第一行,相当于1G.

    N[Enter]N为数字,光标向下移动N行。

    查找和替换:

    /word:向下寻找一个名称为word的字符串。

    ?word:向上寻找一个名称为word的字符串。

    :n1,n2s/word1/word2/g:在第n1行和n2行之间寻找word1这个字符串,并且将其替换为word2.

    :1,$s/word1/word2/g:从第一行到最后一行寻找word1这个字符串,并且将其替换为word2.

    :1,$s/word1/word2/gc:从第一行到最后一行寻找word1这个字符串,并且将其替换为word2.且在替换前显示提示字符给用户确认是否需要替换。

    删除、复制和粘贴:

    x,X:在一行字中,x为向后删除一个字符(相当于[Del]键),X为向前删除一个字符(相当于[Backspace])。

    dd:删除光标所在的一整行。

    ndd:删除光标所在的向下n行。

    yy:复制光标所在的一行。

    nyy:复制光标所在的向下n行。

    p,Pp为将已复制的内容在光标的下一行粘贴,P则为粘贴在光标的上一行。

    u:复原前一个操作。

    [Ctrl]+r:重做上一个操作。

    .:小数点,重复前一个操作。

    一般模式切换到编辑模式:

    i,I:进入插入模式,i为从目前光标所在处插入。I为在目前所在行的第一个非空格字符处开始插入。

    aA:进入插入模式。a为从目前光标所在处的下一个字符处开始插入。A为从所在行的最后一个字符处开始插入。

    oO:进入插入模式。o为在下一行插入。O为在上一行插入。

    rR:进入替换模式。r只替换光标所在那个字符一次。R会一直替换光标所在字符,直到按下Esc键。

    一般模式切换到命令行:

    :w:将编辑的数据写入到硬盘中。

    :q:离开vi.后面加!为强制离开。

    :wq:保存后离开。:wq!为强制保存后离开。


    目前主要的编辑器都有恢复功能,vim也不例外。vim是通过“保存”文件来挽回数据的。

    每当我们在用vim编辑时,vim都会自动在被编辑的文件的目录下面再新建一个名为filename.swap的文件。这就是一个暂存文件,我们对文件filename所做的操作都会被记录到这个文件当中。如果系统意外崩溃,导致文件没有正常保存,那么这个暂存文件就会发挥作用。下面用一个例子来说明(Note:我用的是Ubuntu)。

    打开终端,输入命令,将etc目录下面的manpath.config复制到tmp目录下面,并且更改当前工作目录为tmp:

    cp /etc/manpath.config /tmp

    cd /tmp

    用vim编辑manpath.config文件:vim manpath.config。

    我们在vim的一般模式下按下Ctrl+z组合键,vim就会被丢到后台执行。回到命令提示符环境后,我们模拟将vim的工作不正常中断。

    kill -9 %1;强制杀死制定的进程。

    这样导致暂存盘无法通过正常的流程结束,所以暂存文件不会消失,而是继续保留下来。当再次编辑那个文件时(输入命令vim manpath.config),出现(ubuntu 11.10):

    这时,有六个按钮可以使用:

    O(pen for Read-Only):打开成只读文件。

    E(dit):用正常方式打开要编辑的文件,并不会载入暂存文件的内容。这很容易出现两个用户相互改变对方的文件的问题。

    R(ecover):加载暂存文件的内容。

    D(elete):如果你确定这个暂存文件是没有用的,则可以删除。

    Q(uit):不进行任何操作,回到命令行。

    A(bort):忽略这个编辑行为,和Q类似。

    需要注意的是:这个暂存文件不会应为你结束vim后自动删除,必须要手动删除。否则每次打开对应的文件时都会出现这样的提示。


    三、vim的功能

    【1】块选择:

    这个功能可以让我们复制一个矩形区域的内容,十分方便。

    v:字符选择,会将光标经过的地方反白选择;

    V:行选择;

    Ctrl+v:块选择;

    y:复制反白的地方;

    d:删除反白的地方。

    示例如下:

    需要注意的是,粘贴时候也是粘贴在一个块的范围内,而不是以行为单位来处理的。

    【2】多文件编辑

    我们在两个或多个文件之间复制粘贴内容时,这个功能会让我们方便很多。

    使用命令vim name1 name2 name3...(各个文件名之间用空格隔开)可以同时打开多个文件。

    :n:编辑下一个文件;

    :N:编辑上一个文件;

    :files:列出目前vim打开的所有文件。

    【3】多窗口功能

    可以在一个窗口中打开多个文件。

    输入命令:sp{filename}便可以实现这个功能。如果想要在新窗口启动另外一个文件,则加入文件名。如果省略文件名,则打开的是同一个文件。

    用一个例子来说明。

    vim manpath.config打开一个文件。在一般模式下输入:sp。发现打开的是同一个文件。如果再输入:sp /etc/hosts。则变成:

    其他的按键功能:

    Ctrl+w+j:先按下Ctrl不放,再按下w后放开所有的按键,再按下j(或向下箭头键),则光标可以移到下方的窗口;

    Ctrl+w+k:同上,不过光表移到上面的窗口;

    Ctrl+w+q:离开。

    【4】vim环境设置

    需要注意的是,vim会将i我们的以前的行为都记录下来,以方便我们操作。它保存在文件:~/.viminfo中。

    vim常用的环境设置参数命令如下:

    :set nu  设置行号

    :set nonu 取消行号

    :set hlsearch 设置高亮度查找

    :set nohlsearch 取消高亮度查找

    :set backup 自动备份文件

    :set

    ruler 开启右下角状态栏说明

    :set showmode 显示左下角的INSERT之类的状态栏

    :set backspace={0,1,2} 设置退格键功能。为2时可以删任意字符。为0或1时仅可以删除刚才输入的字符。

    :set all 显示目前所有的环境参数值

    :set 显示与系统默认值不同的参数值

    :syntax on/off 是否开启依据相关程序语法显示不同的颜色

    :set bg=dark/light 是否显示不同的颜色色调

    但是我们没有必要每次使用vim都要重新设置一次各个参数值。我们可以通过配置文件来直接规定我们习惯的vim操作环境。整体vim的设置值一般是放在/etc/vimrc中的。我们一般不要修改这个文件。我们可以通过修改~/.vimrc这个文件,如果不存在,可以手动创建。然后将我们所希望的设置值写入。例如,我们可以这样写:

    1. vim ~/.vimrc  
    2. set hlsearch(注意:set前面也可以加冒号,结果一样)  
    3. set backspace=2  
    4. set ruler  
    5. set showmode  
    6. set nu  
    7. syntax on  
    1. vim ~/.vimrc  
    2. set hlsearch(注意:set前面也可以加冒号,结果一样)  
    3. set backspace=2  
    4. set ruler  
    5. set showmode  
    6. set nu  
    7. syntax on  

    创建并保存这个文件之后,当下次重新以vim编辑某个文件时,该文件的默认环境就是这么设置的。

    转自:http://blog.csdn.net/xiajun07061225/article/details/7039413

    展开全文
  • Linux系统基本命令之vim编辑器的使用 Linux系统下有很多编辑器,经常听到的就有:Emacs  ,pico ,nano ,joe , vim等 一、 学习vim编辑器的原因 l 所有的Linux系统都会内置vi编辑器,而不一定会存在其他的...

    Linux系统基本命令之vim编辑器的使用



    Linux系统下有很多编辑器,经常听到的就有:Emacs ,pico ,nano ,joe , vim等

    一、     学习vim编辑器的原因

    l  所有的Linux系统都会内置vi编辑器,而不一定会存在其他的文本编辑器(所以学会vim 就不用担心Linux系统版本不同而不会使用编辑器)

    l  很多软件的编辑接口都会主动调用vim

    l  Vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性,方便程序设计

    l  程序简单,编辑速度相当快速

    l  功能强大

    二、       Vim的基本使用

           基本上vim分为3中模式,分别是一般模式,编辑模式(插入模式)和命令行模式。

    l  一般模式

    通过vim打开一个文件就自动进入了一般模式,在一般模式下可以自由使用上下左右按键来移动光标,可以删除字符或删除整行,也可以进行复制,粘贴等功能。



    l  编辑模式

    在一般模式中只能进行删除,复制,粘贴等操作,但是无法编辑文件内容。只有在一般模式下按下“i,I, o, O,a ,A,r,R”等任何一个字母才会进入编辑模式。在Linux中,按下这些按键在界面的左下方会出现INSTER(插入)或REPLACE的字样

    在此时才能进行编辑。而如果要回到一把模式必须按下【Esc】键才能退出编辑模式。




    l  命令行模式

    在一般模式中,输入“:,/ ,?”3个字符中的任何一个字符都可以将光标移动到最下面那一行。

    在这个模式中,可以提供你查找数据的操作,保存,大量替换字符,离开vim,显示行号等操作都是在此模式完成的


    三、vim按键的基本操作

    l  一般模式

    移动光标的方法

    h或左箭头             光标向左移动一个字符

    j 或下箭头             光标向下移动一个字符

    k或上箭头             光标向上移动一个字符

    l 或右箭头             光标向右移动一个字符

    (hjkl)四个键排列在一起的,因此可以使用这四个按键来移动光标

    如果想要进行多行移动,想要移动的行数+按键来进行多行移动,例如:向下移动15行,则15j或(15下箭头)。

    G                            移动到这个文件的最后一行(常用)

    nG                           n为数字。移动这个文件的第n行。(配合set nu 使用)

    gg                            移动到这个文件的第一行,相当于1G(常用)

    n【Enter】               n为数字。光标向下移动n行(常用

    屏幕移动

    【Ctrl】+【f】              屏幕向下移动一页

    【Ctrl】+【b】             屏幕向上移动一页

     0或功能键【home】   移动到这一行最前面的字符处(常用)

     $ 或功能键【end】     移动到这一行的最后面的字符处(常用)

    查找和替换

    /word                          向下寻找一个名称为word的字符串(常用)

    ?word                          向上寻找一个名称为word的字符串

    n                                   重复前一个查找动作,表示继续向下查找

    N                                  反向进行查找,向上查找

    :n1,n2s/word1/word2/g                    n1,n2是数字,在第n1到n2行之间寻找word1这                                                             个字符串,并且替换为word2(前面是冒号,相当                                                              于在命令行才能执行)

    :1,$s/word1/word2/g                     从一行到第二行查找word1这个字符串,并且替换                                                            为word2(同上,实际相当于在命令行)

    如果在g后面加上c则给出提示信息给用户确认是否需要替换。

    删除、复制与粘贴

    x X                                            在一行字中x为向后删除一个字符。X为向前删除一个字 符

    nx                                              n为数字表示向后连续删除n个字符

    dd                                            删除光标所在的光标的那一整行

    ndd                                           n为数字,删除光标所在的向下的n

    d1G                                           删除光标所在到第一行的所有数据

    dG                                            删除光标所在最后一行的所有数据

    d$                                             删除光标所在处到该行的最后一个字符

    d0                                             删除光标所在处到改行的第一个字符

    yy                                             复制光标所在的那一行

    nyy                                           复制光标所在的向下的n

    p P                                            p将复制内容在光标下一行粘贴

                                                     P将复制内容在光标上一行粘贴

    y1G                                           复制光标所在到第一行所在的数据

    yG                                             复制光标所在到最后一行的数据

    y0                                              复制光标所在字符到行首的字符

    y$                                     复制光标所在字符到行尾的字符

    l  一般模式

    基本按键说明

    I, i                                            进入插入模式(insert mode)i为光标处开始插入,I为   在目前所在行的第一个非空格字符插入

    A  a                      a当前字符的下个字符插入,A光标所在行的最后一个字    符开始插入

    O  o                                          o在光标下一行插入,O在光标上一行插入

    r,R                       取代模式(replacemode)r:只会取代光标所在的那个                                                    字符一次,R会一直取代光标所在的文字直到按下ESC   键为止

    l  命令行模式的按键说明

    命令行模式 储存、离开等指令:

    :w                                            将编辑的数据写入硬盘文件中

    :w!                                        强制写入文件,不过能不能写入,还是和权限有关

    :q                                            离开vim

    :q!                                        强制离开(不存储)

    :wq                                         储存后离开

    ZZ                                             文件变动,存储后离开,没有变动,不存储离开(实际是                                               在一般模式)

    :w 【filename】                      储存为另一个文件(类似另存文件)

    :set nu                                     显示行号

    :set nonu                                  取消行号

     

    展开全文
  • 有些时候使用vim的时候莫名其妙的会卡死,导致输入不了内容。查了一下资料发现,其实并不是vim卡死,而是在使用vim的工程中带入了许多Windows上的使用习惯,比如“Ctrl-s”保存等,这可能会与Linux平台的有些快捷键...
  • 【vi】vi编辑器卡死解决方法

    千次阅读 2019-04-11 08:50:24
    我们在使用vi编辑器时,有时可能出现编辑器卡死的状态,不能输入,不能退出。其实这不是vi编辑器卡死,而是不小心把vi编辑器锁定了,编辑器处于假死状态,这时vi只是停止向终端输出而已。 原因是在windows下,总是会...
  • 这个多半是你的输入时误按了ctrl + s键启用了终端的滚动锁定,这会禁用你的终端模拟器的滚动功能(通过发送"XOFF"信号暂停软件的输出)。 你可以使用Ctrl + q禁用滚动锁定,恢复终端滚动(通过发送"XON"信号来恢复软件...
  • 多方查找无果,看了官方解释如下: ”CTRL-S and CTRL-Q are called flow-control characters. They represent an antiquated way of stopping and restarting the flow of output from one device to another (e.g...
  • 在linux下使用终端的时候常常不经意的就僵死了,只能够重启来解决这个问题,后来发现常常是因为按了Ctrl+s。 经过查询Ctrl + s在终端下的含义是暂停使用该终端的用途,如果需要启用终端,需要按下Ctrl + q。...
  • 全世界最好的编辑器VIM之Windows配置(gvim)

    万次阅读 多人点赞 2018-03-04 20:16:38
    全世界最好的编辑器VIM之Windows配置(gvim),vundle插件管理,NERDTree插件,ctrlp插件,vim-nerdtree-tabs插件等 。vim本来就是很强大,很方便的编辑器,再加上这些杀手级的插件,那就真的无敌了官方网站:...
  • Vim的终极配置方案,完美的写代码界面! ——.vimrc

    万次阅读 多人点赞 2019-03-19 08:41:52
    先秀一下我的Vim界面 语法补全我用的是YouCompleteMe, 有目录树插件,taglist插件等。 通过插件管理器Vundle来进行安装,具体方法自行百度。 背景可以通过换张自己喜爱的壁纸,然后调终端的透明度,就可以...
  • Ubuntu安装vim

    万次阅读 多人点赞 2018-09-03 17:05:57
    1.linux 默认自带 vi, 一般使用升级版 vim 2.第一次使用需要安装vim sudo apt install vim 如果没有安装的话会提示安装vim 执行安装 sudo apt install vim 测试 vim a.txt 出现下面界面则安装...
  • vim之快速查找功能

    万次阅读 多人点赞 2019-12-26 09:16:43
    vim有强大的字符串查找功能。 我们通常在vim下要查找字符串的时候, 都是输入 / 或者 ? 加 需要查找的字符串来进行搜索,比如想搜索 super 这个单词, 可以输入 /super 或者 ?super, 两者的区别是前者是从上往...
  • Ubuntu18.04下VIM安装及配置

    万次阅读 多人点赞 2020-07-02 14:37:06
    1.安装VIM $sudo apt-get install vim 我的vim 已经是最新版 (2:8.0.1453-1ubuntu1)。 2.安装vim-plug 一种方便简洁的插件管理插件 终端输入如下命令: $ curl -fLo ~/.vim/autoload/plug.vim --create-...
  • vi与vim的区别以及常用命令

    万次阅读 多人点赞 2020-08-26 19:14:00
    一、vi与vim的区别 二、VI模式 三、VIM模式 四、VI与VIM的常用命令
  • 手把手教你把Vim改装成一个IDE编程环境(图文)

    万次阅读 多人点赞 2007-11-11 20:19:00
    手把手教你把Vim改装成一个IDE编程环境(图文) By: 吴垠 Date: 2007-09-07 Version: 0.5
  • 退出命令是,按ESC键 跳到命令模式,然后输入q(不保存)或者wq(保存) 退出。 其他退出命令::w 保存文件但不退出vi :w file 将修改另外保存到file中,不退出vi :w! 强制保存,不推出vi :wq 保存文件并退出vi ...
  • [VIM] VIM 实用插件整理

    万次阅读 2019-06-21 21:05:49
    工欲善其事必先利其器,windows 环境下有诸多好用的 IDE,但在 linux 环境下,可供选择的工具并不多,但是 VIM 作为一款可扩展文本编辑工具,配合丰富的功能插件,同样能满足我们的工作需要,甚至由于其强大的可扩展...
  • 在 Linux 中使用 vim 时,输入 vim xxx.file 输入好文件内容之后,怎么保存呢? 按 ESC,左下角就可以进行输入 :w 保存但不退出 :wq 保存并退出 :q 退出 :q! 强制退出,不保存 :e! 放弃所有修改,从上次保存文件开始...
1 2 3 4 5 ... 20
收藏数 724,499
精华内容 289,799
关键字:

vim