如何在编写代码时最小化使用箭头键?

22

在编写代码时,我通常会关闭括号,进入括号中编辑,退出括号,然后输入分号等操作:

例如,我可能从这样的位置开始(|表示光标的位置):

System.out.println()|

然后向左走:

System.out.println(|)

那么这个:

System.out.println(foo()|)

再次回溯一个空格:

System.out.println(foo(|))

打引号的方式类似:

System.out.println(foo(""|))

我右手经常在主键盘和箭头键之间移动。我尝试了vim,虽然我知道基础知识,但它仍然感觉非常笨拙。

我应该如何做?我只需从左到右输入(打开括号,然后内容,然后闭括号,然后分号)吗?

谢谢。


2
Vim可以通过持续使用而被驯服。 - Alan Haggai Alavi
学习vim的一个帮助我很大的方法是禁用鼠标并随时查看https://vimsheet.com/以提醒自己导航键。我认为在vim中学习导航是最困难的部分,但你很快就会习惯它。只要确保你比我更早地弄清楚Alt +命令键等同于<esc> +该键。你不必总是伸手去按<esc>来移动一个字符或其他东西。此外,您可以创建一个新的键绑定以保存您的小指和手腕。例如,我将<esc>重新映射为双击“j”。 - ElliotThomas
12个回答

10
首先,使用hjkl取代箭头键可以大幅提高Vim的速度。如需查看这些按键的概述,请参见以实用为导向的学习Vim

但在这种情况下,您可能需要的是AutoClose插件。它会自动插入关闭括号(或引号),并将光标置于它们之间。因此,您可以从以下内容:

System.out.println(|)
System.out.println(foo(|))
System.out.println(foo("|"))
如果您输入")),插入符号将“移动到”结束字符而不是插入新字符。 不过,更快到达行末的方法可能是<Esc>A
System.out.println(foo(""));

概括而言,可以通过输入 System.out.println(foo("<Esc>A; 来产生上述结果。

如需编辑成对字符(而非插入),请参见surround.vim


+1。如果你想继续使用Vim,我认为这是一个不错的选择(感谢插件Marius!) - Eliseo Ocampos

6

好的,那么这是Java。如果你使用一个比较好的IDE,你应该能够自动完成编写,这样当你输入“System.out.println”并按下回车接受自动完成时,括号就会显示出来,光标会在中间(哦,并且也会有引号!)


5

如果你已经在vim中了,试着玩一下h、j、k和l键。它们与箭头键的功能相同,但更加方便。尝试养成逐字打字的习惯也可能会有所帮助,但这需要一些努力。


我正想着提出同样的建议。 :-) - Alan Haggai Alavi
1
没错,但也许你在改变和转换模式时,右手得到的东西可能会在左手失去。 - Eliseo Ocampos
1
至少它只涉及更改模式 - 而不是扭曲手来按下像逃脱元交替控制换挡这样的键来执行任何操作。 - Ben Hughes
切换模式的好处是,您甚至不需要看键盘就可以按ESC键(它很难错过,在角落里),然后回到常规位置。在vi中,用户请求可以通过ESC(退出编辑)i(在当前位置之前插入)来实现,这是一个左手按键和另一个右手按键,您无需视觉寻找按键。 - David Rodríguez - dribeas

5

按住 Ctrl 键并使用箭头键可以节省击键。与其一次移动一个字符,它会一次移动一个单词。在倒退时也适用。因此,Ctrl-Backspace 会删除整个单词而不仅仅是最后一个字符。


4
尝试使用AutoHotKey和我的脚本:
*!I::SendInput, % (GetKeyState("Shift", "P") ? "+" : "") (GetKeyState("Ctrl", "P") ? "^" : "") "{Up}"
*!K::SendInput, % (GetKeyState("Shift", "P") ? "+" : "") (GetKeyState("Ctrl", "P") ? "^" : "") "{Down}"
*!J::SendInput, % (GetKeyState("Shift", "P") ? "+" : "") (GetKeyState("Ctrl", "P") ? "^" : "") "{Left}"
*!L::SendInput, % (GetKeyState("Shift", "P") ? "+" : "") (GetKeyState("Ctrl", "P") ? "^" : "") "{Right}"
*!U::SendInput, % (GetKeyState("Shift", "P") ? "+" : "") (GetKeyState("Ctrl", "P") ? "^" : "") "{Home}"
*!O::SendInput, % (GetKeyState("Shift", "P") ? "+" : "") (GetKeyState("Ctrl", "P") ? "^" : "") "{End}"
*!h::SendInput, % (GetKeyState("Shift", "P") ? "+" : "") (GetKeyState("Ctrl", "P") ? "^" : "") "{Del}"

LAlt & Shift:: ('可选行')

这里是关于按住LAlt + 按下 i、k、j、l(箭头键)、u、o(home、end)或h(delete)的内容。最后一行是可选的,如果你不想通过LAlt + Shift来改变键盘语言布局。

你甚至可以与修改器如shift和ctrl组合使用它。

享受吧;)


3

不要省略。

你习惯于结束你开始的事情 - 无论是闭合括号、方括号、大括号,还是与 .Open() 匹配的 .Close() 调用或与 new/malloc 相匹配的 delete/free 调用 - 这是一个很好的习惯。即使你打算在不同的范围内“关闭”对象(如终止函数),你的习惯也会迫使你考虑正确释放资源。

是的,有一些有用的编辑器可以让你编写更快的代码,你应该使用它们,但不要让它们成为你忘记关闭对象/释放资源的支撑。

直接回答你的问题:大多数好的程序员编辑器都可以自定义/配置,因此你只需要阅读关于所选编辑器的高级配置的相关内容 - 如 vim、emacs、Visual Studio 编辑器等。


1
啊?什么?不确定你的意思是什么。 - Lucky

2

我强烈推荐使用vim...因为它会对此有很大帮助!另外,可以考虑使用自动关闭括号、方括号和花括号的工具...我在vim中使用了这样的工具,它可以帮助解决这种问题,因为我已经在括号内部了。


1

我也推荐使用Vim。此外,有一些很棒的插件适用于更标准的IDE,可以使用Vi键绑定。我偶尔会在Netbeans中使用jVI

你会发现,你使用Vim越多,对你的手腕就越轻松。你还会发现,一个足够聪明的查找/替换可以节省你相当多的按键,全局操作正则表达式也是如此。

将 :tabn 和 :tabp 绑定到像 和 这样易于访问的东西上,并强迫自己在不放弃使用适当的GUI编辑器的情况下完成工作。


1

我曾经完全线性地打字(是的,在vim中),从未能够掌握立即创建闭合元素所需的来回跳动。

然而,现在我使用Eclipse - 它会在我输入时为我创建它们,因此在处理有 )")) 混乱情况时,我只需要按下end键并键入;就可以了,根本不需要手动处理。虽然有时会让我感到困惑,但没关系。


1

我发现数字键盘使得导航非常容易,因为Home和PgUp键非常接近。对于实际输入数字,您只需使用键盘的顶部行(我同意这很难学习,但一段时间后足够快)。

对我来说,唯一的缺点是使用笔记本电脑键盘以及使用其他人的机器时需要每次关闭Num Lock。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接