我尽量把手指放在家里。
键入所有括号使我离开那里一点点。
我使用Emacs;括号本身没问题,我对它们很满意。我不喜欢自动为我输入模式的模式。
我曾考虑将方括号重新映射到括号中,反之亦然。这是一个好主意吗?其他人都做了什么?
答案 0 :(得分:19)
我个人会推荐Emacs,SLIME&的致命组合。 paredit.el Paredit允许您在sexp级别伪语义编辑LISP代码,这使得括号几乎完全消失。你可以移动sexps,好像它们是简单的单词,甚至可以用几个键击来改变它们。还有一个名为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后你将停止照顾。
答案 1 :(得分:8)
对于许多非美国键盘布局,输入方括号或括号比打字括号更麻烦,无论如何,这使得大多数语言的编程非常紧张,所以认为自己很幸运。 ;)
至于我,我使用程序员友好的非标准键盘布局,让我通过[Super] -j和[Super] -k键入括号。
答案 2 :(得分:7)
我把手指从主键上移开......
答案 3 :(得分:6)
我有脚踏板。 LeftFoot = open paren,RightFoot = close paren。
嗯,我没有,但我不使用Lisp。不过,这似乎不是一个坏主意。
你能想象使用缩进代替parens的Lisp的变种吗? (从Python规范中获取页面)
答案 4 :(得分:5)
我尝试在Emacs中重新映射,但它会产生新的问题:假设您正在通过ssh在终端窗口中进行编辑,并将一个片段粘贴到窗口中;然后在你的粘贴中交换parens和括号,而不仅仅是你的打字。如果您尝试此操作,请在系统中的较低级别重新映射,例如xmodmap。
(当然,显而易见的另一个问题是在没有重新映射的情况下使用其他计算机。虽然可以忍受,但这也是令人讨厌的。)
答案 5 :(得分:3)
我使用xmodmap将[]重新映射到()并且喜欢它。习惯于在使用[]的语言中编写代码有点奇怪,但是就像任何改变一样,你会习惯它。在Lisp中使用未移位的parens比在其他语言中没有未移位的括号更好,所以它可以解决。
无论如何,这是我的美国键盘必需的xmodmap咒语:
!! swap () and []
keycode 18 = 9 bracketleft
keycode 19 = 0 bracketright
keycode 34 = parenleft braceleft
keycode 35 = parenright braceright
答案 6 :(得分:3)
“......这么多parenethesis”
我做的第一件事是将'('键连接到序列'('+')'+ right(),所以我的括号自动平衡,在编写新代码时留下一半的数量。
您还需要一种方便的方法来导出一个paren - bind C-]到序列搜索(')')+ right()。现在,创作变短了,因为每次完成S-expr时都不需要离开原位 - 只需键入C-。
我接下来要做的是将一个键绑定到一个子程序,该子程序将现有项目推送到当前列表...所以如果//是光标位置,那么这个命令将转换:
(if (< //) (+ x 1)
(x)
(y))
到
(if (< (+ x 1) //)
(x)
(y))
有效地将一个项目从右侧推送到当前列表 - 对于编辑现有代码非常有用。序列'(','&lt;',CS-],Space,'2'将“比较小于2”添加到现有表达式。结合C-],这使您可以从现有表达式中快速构建新表达式。
@jamesnvc, 我没想到绑定()到[]键......我必须尝试一下,谢谢!
答案 7 :(得分:2)
我必须把手指从主行上移开才能到达所有其他的移位数字运算符,所以我从来没有想过这么多。
一旦你输入一个左撇子,电子parens就会给你正确的权利。
答案 8 :(得分:1)
如果使用括号超过方括号,则必须重新映射。我不知道它是如何造成任何问题的,比如,左右交换鼠标按钮。
答案 9 :(得分:1)
当我编写代码时,我通常会花更多的时间思考和阅读我的代码,而不是打字。我过去曾尝试过几次切换到Dvorak键盘布局,但我缺乏明显的动机,因为我可以比我想象的快得多。编程语言语法是一个类似的问题 - 只要我可以在不离开键盘的情况下键入代码(即使用鼠标会很糟糕),我很高兴。
答案 10 :(得分:1)
大多数情况下,我只是键入它们,但有时候,我使用M-(和M-)(特别是当我在“舞台后期”添加LET绑定时),以包含相关的数字表达式。
答案 11 :(得分:0)
我还改变了我的(dvorak)键盘布局(通过xmodmap)来切换括号(“[]”)和parens,以及paredit-mode
(这确实需要一些人习惯)。
答案 12 :(得分:0)
我使用了paredit和pair-mode包,但是,对于快速括号输入,我使用电子点划线来代替a()中的双周期,延迟5 ms(如果我慢慢输入,我会得到两个点然后)。这是一个很棒的软件包(我根据个人喜好进行了一些修改;当我用Dvorak键盘输入时,我用斜线替换了破折号键(//在lisp中不常见)。
为了避免麻烦,我将一个名为'highlight-parentheses的包添加到我的工具集中,为了最大限度地提高性别抓取或文本导航的效率,我也使用vimpulse(因为我是Vim上瘾者)。
答案 13 :(得分:0)
DrScheme默认情况下会翻转parens和square braces的按键。它还有一个功能,它可以神奇地猜测你所指的那两个中的哪一个,所以你很少达到shift-9。
Quack具有与DrScheme类似的功能。
DivaScheme(我的编辑),是完全不同的东西。它在sexp级编辑,因此parens不再妨碍。
答案 14 :(得分:0)
重新绑定大写锁定为“(”并让编辑器自动插入“)”为你。
(这也有助于其他语言有很多括号,例如HTML ...)
答案 15 :(得分:0)
我将Vim与vim-sexp和vim-sexp-mappings-for-regular-people一起使用,然后映射<leader>u
以使我处于正常模式的新(
内。
map <leader>u i(