How to move screen without moving cursor in Vim?
我最近发现了vim的ctrl+e和ctrl+y快捷方式,它们分别以一行步骤上下移动屏幕,而不移动光标。
你知道有什么命令会把光标留在原处,但会移动屏幕,使光标所在的行成为第一行吗?(拥有最后一行的命令将是一个不错的奖励)。
我可以通过手动按ctrl+e(或ctrl+y)适当的次数来实现这一点,但是有一个命令以某种方式直接执行这一点会很好。
有什么想法吗?
- zabbkbdzabbkbd-将当前行移到中间屏幕的(小心zz,如果意外打开Caps LockBkBd,您将保存并退出vim)
- ZBT-移动当前行到屏幕顶部
- ZBABBD-移动当前行到屏幕
- 小心Z Z——如果您碰巧意外地打开了caps锁,您将保存并退出vim!
- @Happygreenkidnaps看到许多人在VIM中挣扎,你在这里的建议比警戒更具教育意义;)
- @幸福的绑架如果你在Vim中不小心锁上了Caps,不管你接下来键入什么,你都会遇到很多麻烦。
- @威哈迪-同意。还有,我认为这也正是凯文·沃恩在2016年10月6日的帖子中所说的。
- @HappyGreenKidnaps地图,大写锁定键以尽快控制!
- 我很喜欢我的Caps Lock,特别是处理大量的C宏,但是你还有其他的选择。首先,找到一个未映射的键(检查两种情况下的字母;尝试添加一个修饰符或前导符,使用符号或函数键等),并将其映射到区分大小写的"risk"组合。第二,根据您的喜好配置vimundo,这样您就可以从OOPS中恢复。(非便携式黑客入侵):第三,做同样的事情,但从你的用户键盘配置,如windows key+z;对于映射到序列,尝试xdotool或triggerhappy。最后,显示Caps Lock状态(无法在Vimscript中完成)。
- 查询Caps Lock状态与环境非常相关。我听说Vimscript不能做到这一点,现在我已经接受了。如果你想沿着这条路走,有xev -q、cat /proc/bus/input/devices来查找要查询的设备,还有evtest或thd ... --dump /dev/input/event<#>来检查状态,等等。如果你绝对要重新映射整个系统,至少要交换两个锁,如caps<->num-但是问题是你更忘记它是开着的,因为如果你以前想要,你会一直保持使用它,不管地图是什么。在文件/用户/系统之前破坏VIM的风险。
- 其他VIM脚本选项:打开"确认"以确认退出/离开/etc;对于写作,我相信您需要一个自动命令,用于与confirm()进行bufwritepre。此外,您可以将caps lock映射到vim理解但未映射的键或组合,而不是将其映射到ctrl,然后在insert/replace模式下,通过手动或类似github.com/tpope/vim-capslock的方式专门模拟caps lock。您可能在vim之外不需要它,但是如果需要,编写一个xmodmap脚本来恢复您的更改,或者查看程序是否支持自己的映射(并做笔记)。
- ZT/ZZ/ZB-固定光标和移动屏幕到顶部/中心(德语:"Zentrum")/底部<--->H/M/L-固定屏幕,并将光标移动到高/中/低位置
- 如果您习惯了zz,那么在Linux中,您可以使用setxkbmap -option caps:x命令重新映射caps-lock安全性。在Vim中,你不能重新映射那把钥匙。你无论如何都不需要它。在这附近,用gU将文本大写,对吗?:)
- 我更喜欢z.而不是zz,只是如果你碰巧开了Caps Lock,zz就不会那么友好了。
另外:
- ctrl y将屏幕向上移动一行
- ctrl e将屏幕向下移动一行
- ctrl u是否向上移动光标和屏幕?页
- ctrl d是否向下移动光标和屏幕?页
- ctrl b将屏幕上移一页,光标移到最后一行
- ctrl f将屏幕下移一页,光标移到第一行
ctrl y和ctrl e仅在光标离开屏幕时更改光标位置。
由http://www.lagmorns.org/docs/vi2.html提供
- 有记忆学家记得这个吗?…
- @尤利德科:埃夫特(瑞典语后面),约尔(意思是过去),上,下,后,前。(向后和向前的单词比向上和向下的长,因此它们会自然地将屏幕移动更长的距离;)
- 我想是的,就像昨天一样,是个更好的记忆法^^
- @Lavya我做了一个编辑来解决这个问题
- ctrl-u和ctrl-d都会移动光标:"光标在文件中向上移动的行数相同(如果可能,当换行和点击文件末尾时可能会有差异)。"
- 谢谢@lexr,我已经更新了答案以反映这一区别。
- :help CTRL-E表示Mnemonic: Extra lines.表示
- 对于助记法,我认为Ctrl-b:back Ctrl-f:forward Ctrl-u:up Ctrl-d:down Ctrl-y,Ctrl-e有点无望,但它们在u'up'和d'down'旁边,所以这是最接近的吗?
Vim要求光标始终在当前屏幕中,但是,您可以将当前位置标记为滚动,然后返回到原来的位置。
1 2 3
| mg # This book marks the current position as g (this can be any letter)
<scroll around>
`g # return to g |
- 请注意,如果您只关心到书签行,可以使用'g'
- "VIM要求光标始终在当前屏幕上"VIM用户喜欢夸口说VIM中的一切都是可配置的。这个不是。我不想在滚动文件时移动光标。为我解封
- 我从未遇到过这样的情况,我希望光标在某个你看不见的地方。当然,当你滚动时光标会移动,但是你可以回到你原来的位置(这样你就可以看到你实际上在哪里,而不仅仅是猜测)。一个是两个反勾号,另一个是非常棒的一个是Ctrl-O,而"反勾号,句号"会让你回到上次编辑的地方。
- @Gedalat,在其他编辑器中,当你滚动离开时,你会非常恼人,不知道你的光标在哪里,你必须用鼠标点击某个地方,这样你才能把光标拿回来。或者你认为你在"这里",开始输入,它突然跳回到光标所在的位置,此时你不能跳回到你滚动的位置,因为只跟踪光标的位置。让光标跟着你去的地方可以说是一件好事。
- 它是可配置的,@gadelat。你只需要把这个答案映射出来(用mg标记位置,滚动,用'g标记位置),就可以了。现在,您可以调用可配置的键四处走动,并且感觉光标从未离开当前位置。VoRE和225!
- 即使VIM要求光标在当前屏幕上。您可以通过折叠文件上下的行而不移动来"滚动"到文件中的每个位置。(另请参阅我的答案,关于移动更少的插件,它提前了这个想法)
以下是我在VIMRC中的解决方案:
1 2 3 4 5 6 7 8 9 10 11 12
| nnoremap k kzz
nnoremap j jzz
nnoremap p pzz
nnoremap P Pzz
nnoremap G Gzz
nnoremap x xzz
inoremap <ESC> <ESC>zz
nnoremap <ENTER> <ENTER>zz
inoremap <ENTER> <ENTER><ESC>zza
nnoremap o o<ESC>zza
nnoremap O O<ESC>zza
nnoremap a a<ESC>zza |
这样光标将停留在屏幕中间,屏幕将向上或向下移动。
- 我认为这个解决方案更符合OP的需要。我应用了它,它就像一个魅力。
- 把"scrolloff"设置为"lines"值的一半怎么样?
- 不幸的是,"noremap ozza"会丢失autoindent,但这可以通过添加和删除临时字符来解决问题。"noremap o.zzxa"
- 谢谢@rld,滚动关闭也是一个好的或者更好的解决方案。谢谢!参考资料如下:vim.wikia.com/wiki/&hellip;
使用ctrl+d、ctrl+f、ctrl+b、ctrl+ctrl+d、g、h、m、l、gabdbdgbbd时,将光标保留在同一列中。
您应该定义以下选项:
- 每次我都会忘记/混淆:zt/zz/zb-固定光标,并将屏幕移到顶部/中心(德语:"zentrum")/底部<----h/m/l-固定屏幕,并将光标移到高/中/低位置。
您可以在光标移动命令前面加上一个数字,这将重复该命令多次
10CtrL+将执行CtrL+ 10次,而不是一次。
您可能会发现这个问题的答案很有用:相对于光标滚动vim,自定义映射:您可以使用那个问题中的ScrollToPercent(0)来完成这个操作。
ZEnter执行此问题所要求的操作。
在zxKBdxKBdz无法正常工作的情况下工作(Vim 7.4.1689 on Ubuntu 2016.04 LTS,无特殊要求。Vimrc)
有时用K和J键滚动文本很有用。所以我在.vimrc中有这个"滚动模式"功能(也绑定在zs上)
卷轴模型
我写了一个新的插件,它可以让你在不移动光标位置的情况下浏览孔文件。这是基于折叠你的位置和你的目标位置之间的线,然后跳过折叠。或者放弃它,根本不动。
在光标是第一行,光标是最后一行,光标在中间,只需点击J、K或L(当你处于插件模式时)。
我想这很适合:https://github.com/anschnapp/move-less网站