我尽量将手指放在本垒上。
键入所有括号让我远离那里。
我使用 Emacs;括号本身没有问题,我对它们很满意。而且我不喜欢自动为我键入它们的模式。
我考虑过将方括号重新映射到括号,反之亦然。这是一个好主意吗?其他人都做什么?
我尽量将手指放在本垒上。
键入所有括号让我远离那里。
我使用 Emacs;括号本身没有问题,我对它们很满意。而且我不喜欢自动为我键入它们的模式。
我考虑过将方括号重新映射到括号,反之亦然。这是一个好主意吗?其他人都做什么?
我个人会推荐Emacs、SLIME和paredit.el的致命组合 Paredit 允许您在 sexp 级别伪语义编辑 LISP 代码,这使得括号几乎完全消失。你可以像简单的单词一样移动sexp,甚至只需敲几下键就可以改变它们。还有一种称为Redshank的次要模式,它与 Paredit 结合使用并提供更多功能。
考虑这些简单的例子(| 是光标的位置):
(foo bar (baz| quux) zot) + C-( => (foo (bar baz| quux) zot)
(foo (bar |baz) quux zot) + C-) => (foo (bar |baz quux) zot)
(foo (bar baz |quux) zot) + C-{ => (foo bar (baz |quux) zot)
(foo (bar |baz quux) zot) + C-} => (foo (bar |baz) quux zot)
我曾经做过一些严肃的 Common Lisp 编程,paredit 对我来说是无价之宝。如果没有我的工具箱,我什至无法想到编写重要的 LISP 代码。毕竟这就是它应该的样子;你永远不必计算或匹配你的括号......一旦你掌握了 Paredit,括号就会从你的眼前消失。
将 [] 重新映射到 () 会有所帮助,但在您开始使用 Paredit 后您将不再关心。
无论如何,对于许多非美国键盘布局,键入方括号或大括号甚至比键入括号更麻烦,这使得大多数语言的编程非常紧张,所以认为自己很幸运。;)
至于我,我使用程序员友好的非标准键盘布局,让我可以通过 [Super]-j 和 [Super]-k 键入括号。
我的手指从home键上移开......
我有脚踏板。LeftFoot = 打开括号,RightFoot = 关闭括号。
好吧,我没有,但我不使用 Lisp。不过,这似乎不是一个坏主意。
你能想象一个使用缩进而不是括号的 Lisp 变体吗?(从 Python 规范中获取一页)
我尝试在 Emacs 中重新映射,但它产生了新问题:假设您正在通过 ssh 在终端窗口中进行编辑,然后将片段粘贴到窗口中;然后在您的粘贴中交换括号和括号,而不仅仅是您的打字。如果您尝试这样做,请在系统中的较低级别重新映射,例如 xmodmap。
(当然,另一个明显的问题是在没有重新映射的情况下使用其他计算机。这也很麻烦,虽然可以忍受。)
“……这么多括号”
我做的第一件事是将'('键绑定到序列'('+')'+right(),所以我的括号自动平衡,在编写新代码时留下一半的剩余输入。
您还需要一种方便的方法来导航出一个括号 - 将 C-] 绑定到序列 search(')')+right()。现在创作变得更短了,因为您不需要将手从初始位置上移开——只需在每次完成 S-expr 时键入 C-]。
接下来我做的是将一个键绑定到一个将现有项目推送到当前列表的子例程......所以如果 // 是光标位置,那么这个命令将转换:
(if (< //) (+ x 1)
(x)
(y))
到
(if (< (+ x 1) //)
(x)
(y))
有效地将一项从右侧推入当前列表——对于编辑现有代码非常有用。序列 '(', '<', CS-], Space, '2' 将“比较小于 2”添加到现有表达式。结合 C-],这使您可以非常快速地从现有表达式构建新表达式。
@jamesnvc,我没有考虑将 () 绑定到 [] 键...我必须尝试一下,谢谢!
我用 xmodmap 将 [] 重新映射到 () 并喜欢它。习惯用使用 [] 的语言编写代码有点奇怪,但就像任何更改一样,你会习惯它。在 Lisp 中使用未移位的括号比在其他语言中没有未移位的括号要好,所以它很有效。
无论如何,这是我的美式键盘所需的 xmodmap 咒语:
!! swap () and []
keycode 18 = 9 bracketleft
keycode 19 = 0 bracketright
keycode 34 = parenleft braceleft
keycode 35 = parenright braceright
我必须把手指从主排移开才能接触到所有其他班次号码操作员,所以我从来没有考虑太多。
一旦你键入左括号,电动括号就会给你正确的。
如果您使用括号而不是方括号,请务必重新映射。我不认为它会带来比左撇子交换鼠标按钮更多的问题。
当我编写代码时,我通常会花更多的时间思考和阅读我的代码,而不是输入代码。我过去曾尝试过几次切换到 Dvorak 键盘布局,但我缺乏明显的动力,因为我的打字速度比我想象的要快得多。编程语言语法是一个类似的问题——只要我可以在不离开键盘的情况下输入代码(即使用鼠标会很糟糕),我就很高兴。
DrScheme默认翻转括号和方括号的击键。它还有一个功能,它可以神奇地猜测您指的是两者中的哪一个,因此您很少使用 shift-9。
Quack具有与 DrScheme 类似的功能。
DivaScheme(我的编辑)是完全不同的东西。它在 sexp 级别进行编辑,因此括号不再妨碍。
大多数情况下,我只是键入它们,但偶尔,我使用 M-( 和 M-) (尤其是当我在“阶段后期”添加 LET 绑定时)来包含相关的 nnumber 个表达式。
我还更改了我的(dvorak)键盘布局(通过 xmodmap)来切换括号(“[]”)和括号,以及paredit-mode
(这确实需要一些时间来适应)。
我使用 paredit 和 pair-mode 包,但是,为了快速输入括号,我使用电点和破折号在 5 毫秒延迟时替换 () 中的双句点(如果我输入缓慢,我会得到两个点)。这是一个很棒的包(我根据个人喜好做了一些修改;当我使用 Dvorak 键盘键入时,我用斜杠替换了破折号键(// 在 lisp 中并不常见))。
为了避免括号中的混乱,我在我的工具集中添加了一个名为 'highlight-parentheses 的包,并且为了在一般情况下获取性别抓取或文本导航的最大效率,我还使用 vimpulse(因为我是一个 Vim 上瘾者)。
将大写锁定重新绑定到“(”并让编辑器为您自动插入“)”。
(这也有助于其他有很多括号的语言,例如 HTML ......)
我将 Vim 与vim-sexp和vim-sexp-mappings-for-regular-people一起使用,然后将我映射<leader>u
到新的(
.
map <leader>u i(