Vim如何使用相对行号实现一切操作详解
作者:laixintao 发布时间:2022-06-14 21:15:09
前言
大家都知道,我们使用Vim的一点好处就是,可定制性非常高,如果遇到任何让自己感到不适的痛点,都可以通过配置甚至开发一款插件来解决。开始使用Vim一段时间之后,我发现一个非常“ * ”的地方:Vim的很多命令都是需要查行数的。比如“删除一个函数体”,你就要数数这个函数占了几行(比如5行),然后按5dd。如果是使用鼠标的话就不用数了,可以直接拖过去,但是鼠标效率太低,既然学了Vim就不要让手离开键盘了。
我总结了一套方案,几乎所有的操作都可以不用数数来完成。
Vim支持两种行号,相对行号和绝对行号。相对行号是显示每一行距离光标所在行相隔多少行,绝对行号就是顺序显示每一行的序号。
Vim使用相对
set nu打开行号显示, set rnu打开相对行号显示(更多信息可以查看:help nu
和 :help rnu
。
效果如下:
可以看到,如果同时打开二者,就会在当前行显示绝对行号,其他显示距离当前行的距离。
使用一段时间我发现,在normal模式时,经常进行对多行的操作,这时候如果使用绝对行号,那么必然是要做减法,或者去数数来确定行的数量的。所以在normal模式应该使用相对行号。0对我们来说是没有任何作用的,所以当前行还是显示行号吧。
然后一些常用的操作习惯都要相应换一下:
删除n行。3dd是删除包括当前行一共3行,但是因为显示的是相对行号,我们要“删除直到目标行”的时候,要不自觉的+1,比如在上面最后一幅图,要删除直到“终端配色安装”的内容,就要按4dd。有没有办法不用计算,所见即所得呢?有的,d3j即可。command+直到目标行号+方向。例如删除直到上面“我对……”的内容,就是d4k。
其余的操作也是类似,例如移动到下面4行,可以用4gg,也可以用g4j。其他还有yank操作等。
替换范围本来是使用绝对行号就可以,例如替换10-20行,就是:10,20s/xxx/yyy/g,但是由于我们normal模式显示了相对行号,那么就要根据相对行号操作了: :.+2,.+12s/xxx/yyy/g (假设当前在第8行)。.在Vim中表示当前行,要善于利用。由于我们显示的是相对行号,所以基本上和行号有关的操作都需要计算完成,用.加上/减去显示的相对行号(所见即所得)
在insert模式时,我们一般都是编辑操作,不会对多行进行判断,此时可能对绝对行号更关心(写到多少行了等)。所以可以监听一下事件,进入编辑模式时使用绝对行号,退出编辑模式进入normal模式时使用相对行号。
设置如下:
set nu
augroup relative_numbser
autocmd!
autocmd InsertEnter * :set norelativenumber
autocmd InsertLeave * :set relativenumber
augroup END
set nu是因为我一般打开一个文件不一定是编辑目的,浏览的话绝对行号更方便。这样设置可以让第一次进入文件的时候使用绝对行号,进入编辑模式再退出到normal模式时再显示相对行号。
这样用了一段时间,感觉按下的键多了,但是脑子里需要的计算少了很多,还不容易出错,挺好的。
最后附上我的.vimrc,供参考使用,不推荐盲目复制。
相关问题
在 Vim 7.4 之前的版本, 启用相对行号当前行号将变为0, 无法显示正常的行号, 在 Vim 7.4 中则可以正常的显示当前行号的同时来显示相对行号, 下面有两张图可以对比
Vim 7.3
Vim 7.4
从上面的图片看来, 启用相对行号后可以很直观的看到当前行距离上面/下面某行的行数
可以使用以下指令启用这个特性
set relativenumber
启用相对行号后再也不用为了复制多行费力气的去数了
来源:https://www.kawabangga.com/posts/2287
猜你喜欢
- 08年美国次贷危机引起了全球的金融海啸,在此背景下,成千上万的企业开始谋求新的营销模式,以突破自身困境渡过这段艰难的时期。作为一种全新的营销
- 现在人们买食品都讲究绿色、没有添加任何化学添加剂的食物。那么对网站推广这块又何尝不是呢?网站推广不管是海外网站推广还是国内网站推广。最终的搜
- linux系统目录结构你清楚吗?1、树状目录结构图2、目录介绍3、/etc/目录4、/usr/目录5、/proc/目录6、/dev/目录7、
- 引言条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起(此时不再占用cpu);另一
- 1.问:Exchange 2000支持单信箱区恢复么?答:Exchange 2000并不支持使用微软工具和产品进行的单信箱区恢复。您可以找到
- 概述使用docker已经有一年多了,最近意识到,我在快速编排服务的时候,shell脚本里用到的git还是原生的于是打算也将git容器化,在d
- dedecms默认在列表是无法调用tag标签的,经过各位版主们的帮助,现给大家提供出种方法方法1:在列表需要的位置加入下列代码[field:
- 1. 安装Evolution Evolution是一个整合了邮件,日历,计划任务,地址本功能的套件。以root身份运行apt-get ins
- 话说某日暴某站菊花,发现Web目录权限极小,除了基本的上传功能健全,几乎没有任何权限,修改,删除,替换等都不奏效.心想此站权限设置果然牛B,
- 内容摘要:本文列出了SQL 注入一些常用语句,站长朋友请注意了,看看您的网站程序是否存在这样的漏洞,一般过滤post或get过滤的
- 10月23日消息 一面高调叫嚣“反盗版”,一面被法院裁定网络影视盗版第一案,在网络视频维权大戏中,正
- Super Screenshot ,一款简便、实用的在线网站截图工具。输入网站地址即可截取整页图片,并可以根据需要设置不同的显示及下载参数。
- 上次装好了PHP,MySQL,还缺个MySQL图形化管理工具。MySQL图形化管理工具有很多,phpmyadmin无疑是必装的,国外空间大多
- 怎样登陆Account Manager呢?你可以从你的Account Manager里管理你的产品及服务里的很多设置。&
- 各位新老站长朋友们大家好,我是芭芭啦音乐论坛的站长,这个论坛是我最近和一个朋友一起做的,因为我们都比较爱好音乐,所以做了这样一个对自己兴趣的
- ubuntu安装pycharm的方法如下所示:1. 下载http://www.jetbrains.com/pycharm/download/
- 10月16日消息 最近一份市场调查报告表明,2009年第三季度全球互联网搜索广告市场的表现基本令人满意,不过分析师仍然表示,对即将来到的第四
- 说句实在话,作为中国排名第一的搜索引擎,出现这种情况真的是很不应该,但是却着实出现了。在五月的时候,很多的seoer就讨论过这个现象。有很多
- IE6是无数网页设计者和开发人员的噩梦,如果要兼容IE6,都必须写很多的代码去照顾它,NeoEase的IE6必死这篇文章很清楚地讲到了为什么
- 1、问:我的机器拥有多个IP地址,它们对应各自的域名,如何建立指向不同目录的多个WWW站点?答:你需要分别将各个Web站点的“Web站点”选