Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否有一种方法在视觉模式下切换相对数字设置,并且仅用于当前窗口?

是否有一种方法在视觉模式下切换相对数字设置,并且仅用于当前窗口?
EN

Stack Overflow用户
提问于 2021-12-20 23:56:28
回答 1查看 369关注 0票数 0

我试图通过按F2键来切换相对行号。我的.vimrc文件中有以下内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  " toggle relative line numbers
  function! RelativeNumberToggle()
      if (&number == 0)
          set number
      elseif (&relativenumber == 1)
          setlocal norelativenumber
      else
          setlocal relativenumber
      endif
  endfunction
  noremap <silent> <F2> :call RelativeNumberToggle()<CR>

这在正常模式下工作,但有两个问题:

  1. 当我进入视觉模式并按F2键切换相对行号时,所选内容丢失,我又回到了正常模式。

正常模式下的

  1. ,尽管使用setlocal仅切换当前窗口的相对数字设置,但所有窗口的相对数字设置都是切换的。

是否有一种方法在视觉模式下切换相对数字设置,并且仅用于当前窗口?

应该指出的是,我还尝试使用ModeChanged事件激活/取消相对行号,以便在输入视觉模式时启用相对行号,在编辑器离开可视化模式时启用相对行号。当进入视觉模式时激活相对行号是很容易的,ModeChanged *:[vV\x16]做这项工作。问题是在编辑器退出视觉模式时禁用相对行号,因为编辑器加载了特殊情况:例如,在单击或删除文本之后,编辑器切换到正常模式,但ModeChanged [vV\x16]:*ModeChanged *:n事件不会触发--因此不会禁用相对行号。我可以使用TextYankPost事件来修复这个问题。但是,在用=>格式化可视选择后,编辑器也会下降到正常模式,相对行号也不会被禁用。我不知道如何解决最后一个特例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-21 01:16:31

如果Vim是最近的(8.2.1978及更高版本),则可以使用<Cmd>在映射中执行Ex命令,而不必真正离开当前模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
noremap <silent> <F2> <Cmd>call RelativeNumberToggle()<CR>

你的功能也需要注意。实际上,它做了两件事:

当禁用&relativenumber.时,

  1. 启用&number
  2. 切换

第一件事可以简化为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set number

因为当选项已经启用时,启用它基本上没有任何作用。

第二件事也可以简化,因为布尔选项已经有一个切换机制,不需要检查当前值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setlocal relativenumber!

或者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setlocal invrelativenumber

这意味着您不再需要该功能了,因为您可以使用更少的样板来实现完全相同的功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
noremap <silent> <F2> <Cmd>set number <bar> setlocal relativenumber!<CR>

参考资料:

  • :help :map-cmd
  • :help :set-!
  • :help map-bar
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70432184

复制
相关文章
判断窗口是否在当前虚拟桌面
IVirtualDesktopManager实例的IsWindowOnCurrentVirtualDesktop提供窗口是否在当前活动的虚拟桌面上。
Qt君
2023/03/17
1.3K0
判断窗口是否在当前虚拟桌面
Selenium获取当前窗口句柄与切换回原窗口句柄
Selenium通过window_handles获取当前窗口句柄,进行页面元素操作
流柯
2018/08/31
3.2K0
[nptl][pthread]一种判断thread是否在执行的方法
前言: 主线程中怎么确定某线程是否在执行? 作者遇到这个问题,第一感觉有点蒙。翻了一下glibc的代码,算是找到一个比较好的办法吧。 分析: 1,变量控制 这个很简单,在线程执行进入的时候,写控制变量running = true。线程将要退出的时候,写控制变量running = false,判断running这个变量就可以知道线程是否在执行了。 这个方法简单粗暴,在绝大多数的情况下都是能工作的。但是,有一种比较极端的情况:某线程正好赋值完控制变量,但是函数体还没有结束(对应的内核task当然也还在),这
皮振伟
2018/04/09
2K0
[nptl][pthread]一种判断thread是否在执行的方法
typecho判断当前分类是否有子分类
在sf上看到的是这个样子的 widget("Widget_Metas_Category_List")->to($category); while($category->next()) { $n
泽泽社长
2023/04/17
4920
Python+selenium 自动化-切换窗口页签、切换iframe框架。确定页面是否包含iframe方法。
查看页签是否包含iframe页签。 原理:如果没有找到id为mainiframe的iframe页签就会抛出异常。
小蓝枣
2020/09/23
1.1K0
Python+selenium 自动化-通过窗口名切换窗口,如何获取当前窗口的title窗口名
通过窗口名切换窗口 driver.title 可以获取当前窗口名,把所有的窗口遍历一遍,当窗口名和要切换的吻合就停止,都没有切换到最右边的窗口。
小蓝枣
2020/09/23
3.4K0
判断是否有重复的数字
import java.util.Scanner; import java.util.HashMap; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int m=input.nextInt(); HashMap map=new HashMap(); while(m-->0) { int tmp=input.nextInt(); if(
葆宁
2019/04/18
3.4K0
判断是否有重复的数字
SharpDx 进入全屏模式 窗口模式设置透明窗口交换链全屏
本文的上一篇是 C# 从零开始写 SharpDx 应用 初始化dx修改颜色 本文的代码将会在上一篇的代码上修改
林德熙
2019/06/15
2.1K0
LeetCode140|有多少小于当前数字的数字
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
码农王同学
2020/12/25
3870
SetTimer在无窗口和有窗口线程的使用
 今天犯了一个粗心的错误,在无窗口线程中,SetTimer中设置计时器ID,而WM_TIMER消息响应函数中得到的计时器ID却不是之前设置的计时器ID.
雪影
2018/08/02
8300
qt tabwidget切换_标签怎么在新窗口打开
QTabWidget 用来分页显示 重要函数: 1.void setTabText(int, QString); //设置页面的名字. 2.void setTabToolTip(QString); //设置页面的提示信息. 3.void setTabEnabled(bool); //设置页面是否被激活. 4.void setTabPosition(QTabPosition::South); //设置页面名字的位置. 5.void setTabsClosable(bool); //设置页面关闭按钮。 6.int currentIndex(); //返回当前页面的下标,从0开始. 7.int count(); //返回页面的数量. 8.void clear(); //清空所有页面. 9.void removeTab(int); //删除页面. 10.void setMoveable(bool); //设置页面是否可被拖拽移动. 11.void setCurrentIndex(int); //设置当前显示的页面.
全栈程序员站长
2022/11/04
3.8K0
qt tabwidget切换_标签怎么在新窗口打开
仅使用HTML和CSS的亮暗模式按钮切换
我的目标之一是使每个工具都可以不使用javascript,以一定程度上简化代码,同时也是个挑战。
鲸落c
2022/11/14
4K0
仅使用HTML和CSS的亮暗模式按钮切换
仅使用HTML和CSS的亮暗模式按钮切换
我的目标之一是使每个工具都可以不使用javascript,以一定程度上简化代码,同时也是个挑战。
海拥
2021/08/23
3.3K0
仅使用HTML和CSS的亮暗模式按钮切换
LeetCode 1365. 有多少小于当前数字的数字
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。
freesan44
2020/06/11
4910
前端页面,如何获取当前系统时间,并且在页面展示
目录 html页面代码 html页面代码 <script type="text/javascript"> Date.prototype.format = function (fmt) { var o = { "y+": this.getFullYear, //年 "M+": this.getMonth() + 1, //月份 "d+": this.getDate(), //日
一写代码就开心
2022/05/09
1.3K0
前端页面,如何获取当前系统时间,并且在页面展示
js单项选择答题_完成窗口切换的方法
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/124998.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/03
6K0
PyQt5 技术篇-设置窗口相对桌面位置,按屏幕比例
QApplication.desktop() 可以获取到桌面的宽度和高度。 窗口的 move() 属性可以设置窗口的位置。
小蓝枣
2020/09/23
2.7K0
Linux下用于查看系统当前登录用户信息的4种方法
作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动。有些时候,你甚至需要知道他(她)们正在做什么。本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法。 1. 使用w命令查看登录用户正在使用的进程信息 w命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。w命令输出的信息包括:   用户名称   用户的机器名称或tty号   远程主机地址   用户登录系统的时间   空闲时间(作用不大)   附加到tty(终端)
joshua317
2018/04/16
2.4K0
vue切换路由并且传递参数
项目需求,从a页面跳转到b页面,将a页面的参数传递给b页面; // 1,路由事件 fun (id) { this.$router.push({ name: 'Describe', params: { id: id } }) } // 2,路由配置 { path: '/describe', na
用户4344670
2019/08/28
9140
CentOS下用于查看系统当前登录用户信息的4种方法
作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动。有些时候,你甚至需要知道他(她)们正在做什么。本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法。
码农编程进阶笔记
2021/07/20
1.2K0

相似问题

VIM NerdCommenter:如何在视觉模式下切换注释?

11

是否有一种方法在vim中改变搜索文本高亮颜色仅在视觉模式?

19

是否有一种方法可以知道窗口是处于窗口模式还是处于全屏模式?

19

在视觉模式下选择以粘贴到vim窗口之外

41

flock()是否仅适用于当前方法?

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文