首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vim:不同视觉模式下的不同地图

Vim:不同视觉模式下的不同地图
EN

Stack Overflow用户
提问于 2014-08-13 22:37:00
回答 2查看 182关注 0票数 1

通过在我的vimrc中添加以下代码,我使用了一个常用的技巧来让j和k在正常模式下更好地处理换行:

代码语言:javascript
复制
nnoremap <silent> j gj
nnoremap <silent> k gk

我只是想通过这样做在视觉模式中使用它:

代码语言:javascript
复制
vnoremap <silent> j gj
vnoremap <silent> k gk

它在普通视觉模式下工作得很好,但在视觉线条模式(Shift+V)或视觉块模式下就很糟糕了。因为我想在这些模式下移动实际的行,而不是在同一行中上下移动。

如何才能仅在正常视觉模式下使用此地图?

EN

回答 2

Stack Overflow用户

发布于 2014-08-13 22:51:23

不能让gjV (line-wise visual)模式下工作。

假设它可以工作,那么当你在非常长的(折行的)行上执行gj时,vim将选择一行的一部分,也就是说,它不再是逐行可视模式。

逐行选择中选择的最小单位应该是一条线。

更新

我必须澄清,如果您在选定区域,gj中使用V选择了一条长线,它会向上/向下移动您的光标。但是如果你想让gj另外选择一条“屏幕上的线路”,这是行不通的,这里的gjj是一样的

update2

OP注释的变通方法(仅以j/gj为例):

代码语言:javascript
复制
nnoremap V :vnoremap j j<cr>V
nnoremap v :vnoremap j gj<cr>v

或者(Peter Rincker的建议)

代码语言:javascript
复制
xnoremap <expr> j mode() ==# 'V' ? 'j' : 'gj'
票数 3
EN

Stack Overflow用户

发布于 2014-08-14 00:24:56

多亏了@Kent他的回答,我找到了一种让它按我想要的方式工作的方法。

代码语言:javascript
复制
nnoremap <silent> V :silent! vunmap j<cr>:silent! vunmap k<cr>V
nnoremap <silent> v :vnoremap j gj<cr>:vnoremap k gk<cr>v
vnoremap <silent> V <esc>:silent! vunmap j<cr>:silent! vunmap k<cr>gvV
vnoremap <silent> v <esc>:vnoremap j gj<cr>:vnoremap k gk<cr>gvv

然而,我确实认为这是一个丑陋的技巧,因为每次按下vV时,它都会取消映射和映射按键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25289065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档