原文: https://juejin.im/post/5da68cb8f265da5b8c03c4a1

Vim只不过是一个文本编辑器,但如果你曾见过真正的高手是如何使用vim的,你就会知道,这个软件出人意料地强大、高效、迅捷。对于高水平使用者而言,vim能够帮助其更清晰、明确地表达操作指令。一旦熟练掌握vim语言,使用者就能更加快速地和自己的电脑交流。

必备条件

在开始阅读本文之前,你应该至少知道vim有哪些简单的指令,例如基本动作、导入操作和查找信息。如果你还不了解这些知识,你可以打开软件终端并运行:

sudo apt-get install vim

接着,你就可以运行以下指令来自学vim:

vimtutor

1. 宏指令

不得不重复进行的某些文本编辑任务会让人觉得很烦躁,做那些需要操作者重复几十次的任务就更糟糕了。宏指令能够有效地解除这些麻烦。你只需要敲击一个记录键,输入需要改变的指令,然后在指令结束时停止记录就可以了。之后,你就可以重复使用在这个记录里的动作了,而这只需你按下一个键。

• 按下‘q’键让vim开始记录,然后按任意键,来告诉vim你想把保存的记录下次通过这个键来调出。本次案例中,这个键设置为‘a’,所以完整的指令就是‘qa’。

• 执行你的命令。

• 按下‘q’来结束记录。

• 需要重复保存的系列动作时,输入‘@a’即可。

2. 相对行号

没人喜欢心算。即使你能心算得很快,算出23=23总要快于141-118=23。相对行号和绝对行号不同,它显示的是你光标所在行的相对数字。这个功能不仅便利了删除行的操作,也使跳到指定位置的过程变得更为简洁。你可以在.vimrc中加入以下指令来得到这个结果:

set relativenumber

举例来讲,你可以通过输入下列vim指令来删除其后的25行:

25dd

3. 寄存器(Registers)

寄存器是在复制文本后,临时储存要粘贴内容的空间。每台电脑都有很多寄存器。Vim会自动地使用一个寄存器来储存它的文本,这些文本和电脑里其他临时储存的复制文本不一样。向你的.vimrc中加入以下指令:

set clipboard=unnamed

set clipboard=unnamedplus

加入这项指令后,在vim中复制粘贴文本就从“CTRL+V”, 和“CTRL+C”这一过程变为简单地输入‘p’。

如果你想在不重写你的寄存器的情况下删除文本,你可以在指令前加上“_符号:“_dd 来删除一行。

4. 重映射Escape操作

Escape键和主键(home row)离得很远。因此,它并不是一个离开当前指令很好的选择。你可以在你的.vimrc中加入:

cnoremap kj <C-C>

cnoremap jk <C-C>

这样,你就可以通过键入’jk’或者‘kj’来离开一个指令,同时,你的手一直呆在主键区。

5. 动词+修饰词+宾语

Vim有一套自己特殊的语法,这套语法遵循‘动词+修饰词+宾语’结构。

动词举例:

• ‘d’删除(delete)

•‘c’改变(change)

修饰词举例:

• ‘t’直到(till)

• ‘f’找到(find)

• ‘i’里(inside)

宾语举例:

• ‘w’词(word)

• ‘(’插入语(parenthesis)

• ‘t’标签(tag)

• ‘s’句子(sentence)

• ‘“’引用

举个例子,‘diw’就是删除光标所在的词,无论光标是在词首还是词尾。‘dt)’删除光标所在位置和下括号之间的文本。‘cfp’能删除光标所在位置到该段落结束前的所有文本,之后自动载入插入模式。和‘.’(重复前序指令)一起使用,这套语法就非常强大。

6. 处理空白格(White space fixing)

软件工程中最让人受不了的情况,就是遇到tabs而不是空和空白格(white space)在一行的结尾。为了解决这个问题,你可以向.vimrc加入:

set list

这个指令会在每行结尾显示一个$符号,并且用^I代替tabs。你从而能更容易地识别出tabs和行尾。除此之外,下面的例子中,使用了空代替所有的tabs,这也让空白格更加便于处理:https://vim.fandom.com/wiki/Example_vimrc.

7. 快速查找(navigate)

你习得的有关vim的第一个操作,就是如何使用hjkl键来查找信息。但是,这其实是很慢的查找方式。这里列出了能帮助你快速查找的指令:

• 敲击‘gg’来移动到文档的顶部,‘G’来移动到最底部。

• 敲击CTRL+F来快速向前移动,CTRL+B来快速向后移动。

• 敲击‘zz’来重新定位页的中心,这也你的光标就成为新的中心。

• 遇到上括号像‘{’或者‘(’,你可以敲击‘%’来移动到它们所匹配的下括号。

• ‘/’可以开始查找你想要的词。

8. 日期(date)

在许多场景下,你需要给文件加上日期。这一操作缓慢且乏味。这时,你可以向你的.vimrc中加入:

nmap <F3> i<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc>

imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR>

从而可以只通过键入F3来给文档加日期和时间。

好用到哭!8个技巧让Vim菜鸟变专家的更多相关文章

  1. 【转载】技巧:Vim 的纵向编辑模式

    如果要我选一个Vim中让我觉得Life Changing功能的话,我一定会选Vim的块编辑功能,也就是Ctrl+V,虽然还有些别的编辑器也有这功能,但目前为止,我从中受益颇大 原文地址:技巧:Vim ...

  2. php代码20个实用技巧 ------ 转发自菜鸟教程

    1.不要实用相对路径 常常会看到: require_once('../../lib/some_class.php'); 该方法有很多缺点:它首先查找指定的php包含路径,然后查找当前目录,因此会检查过 ...

  3. MAC OS进阶必看——这10个技巧让你秒变MAC达人

    文章内容及图片来源于:什么值得买,如果涉及版权问题,请联系作者删除 文章收录于:风云社区(提供上千款各类mac软件的下载) 使用mac系统也有好几个年头,出色的办公效率以及越来越广的兼容性让mac成为 ...

  4. 技巧:Vim 的纵向编辑模式【转】

    转自:https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 张 曜民 和 卢 丹2011 年 2 月 18 日发布 WeiboGoog ...

  5. 技巧:Vim 的纵向编辑模式

    https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 开始之前 人类大脑对文字的处理是平面式的,所以我们浏览文章.查找资料或者重构代码 ...

  6. C#中泛型方法与泛型接口 C#泛型接口 List<IAll> arssr = new List<IAll>(); interface IPerson<T> c# List<接口>小技巧 泛型接口协变逆变的几个问题

    http://blog.csdn.net/aladdinty/article/details/3486532 using System; using System.Collections.Generi ...

  7. Git小技巧:VIM中如何填写注释信息

    使用Git命令行工具的时候,经常一不小心就进入VIM界面,例如git commit没有填写任何描述信息.对于习惯了Windows可视化操作界面的用户,可能一下子会觉得无所适从,只能在键盘上一顿短按.下 ...

  8. javascript 框架、根基技巧、布局、CSS、控件 JavaScript 类库

    预筹备之 JavaScript 今朝支流的 JavaScript 框架排名中,jQuery 和 Ext 可算是佼佼者,得到了用户的普遍好评.海内的一些框架许多也是模仿 jQuery 对 JavaScr ...

  9. linux 命令行 光标移动技巧

    linux 命令行 光标移动技巧 看一个真正的专家操作命令行绝对是一种很好的体验-光标在单词之间来回穿梭,命令行不同的滚动.在这里强烈建立适应GUI节目的开发者尝试一下在提示符下面工作.但是事情也不是 ...

随机推荐

  1. 用户交互Scanner的用法

    Java用户交互的目的是实现程序与人的交互:一般通过Scanner来获取用户的输入:java.util.Scanner 是Java5的新特征. 基本语法: Scanner s=new Scanner( ...

  2. vs2017离线安装vs tools for unity

    Visual Studio Tools for Unity 从vs2017开始就不提供单独的安装包下载,需要通过vs安装程序在线安装. vs2017离线安装vs tools for unity 那么如 ...

  3. Rust中的测试用例的写法

    有点类似 #[derive(Debug)] pub struct Rectangle { length: u32, width: u32, } impl Rectangle { pub fn can_ ...

  4. javascript加载XML字符串或文件

    1. 加载XML文件 方法1:ajax方式.代码如下: var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObje ...

  5. c# 第六节 c#的程序结构,以及vs的文件结构

    本节内容: 1:c#的程序结构 2:深入了解vs的文件 1:c#的程序结构 实例: 2:深入了解vs的文件 三者的关系: 3:命令空间是什么 使用别名:

  6. shell-基础2

    条件表达式 文件判断 文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file 文件存在且为普通文件则为 ...

  7. VIJOS-P1059 积木城堡

    洛谷 P1504 积木城堡 https://www.luogu.org/problem/P1504 JDOJ 1240: VIJOS-P1059 积木城堡 https://neooj.com/oldo ...

  8. c# 多线程多个参数

    for (int i = 0; i <count; i++) //根据选择的串口号数量创建对应数量的线程 { thread = new Thread(new ParameterizedThrea ...

  9. appium--元素等待和屏幕截图

    元素等待 设置元素等待可以更加灵活的指定等待元素的时间,从而增强脚本的健壮性,提高执行效率 强制等待 from time import sleep sleep(5) 隐式等待 隐式等待是针对全部元素设 ...

  10. [LeetCode] 917. Reverse Only Letters 只翻转字母

    Given a string S, return the "reversed" string where all characters that are not a letter  ...