Как вы печатаете lisp эффективно, с таким количеством скобок?
Я стараюсь держать пальцы на домашнем ряду как можно больше.
ввод всех скобок заставляет меня отойти от них немного.
Я использую Emacs; сами скобки не являются проблемой, мне с ними комфортно. И мне не нравятся режимы, которые печатают их для меня автоматически.
Я думал о переназначении квадратных скобок в скобки и наоборот. Это хорошая идея? Что делают все остальные?
16 ответов
Я бы лично рекомендовал смертельную комбинацию Emacs, муть & paredit.el Paredit позволяет псевдо-семантически редактировать код LISP на уровне sexp, и это делает скобки исчезают почти полностью. Вы можете передвигаться по 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)
Я сделал несколько серьезных общих программирования Lisp, в свое время, и paredit оказался бесценным для меня. Я даже не могу думать о написании нетривиального кода LISP без моего набора инструментов. И в конце концов, так и должно быть; вам никогда не придется считать или сопоставлять свои скобки... как только вы освоите Paredit, скобки просто исчезнут перед вашим глаза.
переназначение [] в () поможет, но вы перестанете заботиться много после того, как вы начнете использовать Paredit.
Не стесняйтесь использовать LISP конкретные части из моей точки-emacs.
со многими раскладками клавиатуры не-США, набрав квадратные скобки или фигурные скобки еще более громоздко, чем набрав скобки, в любом случае, что делает программирование на большинстве языков очень напряженным, поэтому считайте, что вам повезло. ;)
Что касается меня, я использую программистскую нестандартную раскладку клавиатуры, которая позволяет мне вводить скобки через [Super] - j и [Super] - k.
У меня есть педали. LeftFoot = открытая скобка, правую ногу = рядом парень.
Ну, я не, но я не использую Lisp. Хотя это не кажется плохой идеей.
можете ли вы представить себе вариант Lisp, который использовал отступ вместо parens? (взяв страницу из спецификации Python)
Я попытался переназначить в Emacs, но это создает новые проблемы: скажем, вы редактируете в окне терминала через ssh и вставляете фрагмент в окно; затем parens и скобки меняются местами при вставке, а не только при вводе текста. Если вы попробуете это, переназначите на более низком уровне в вашей системе, например xmodmap.
(конечно, очевидная другая проблема-использование других компьютеров без переназначения. Это тоже было неприятно, хотя и терпимо.)
Я переназначил [] в () с xmodmap и нравится. Это было немного странно писать код на языках, которые используют [], но как и любое изменение, вы привыкнете к нему. Наличие непереводимых родителей в Lisp лучше, чем отсутствие непереводимых скобок на других языках, поэтому это работает.
в любом случае, вот необходимое заклинание xmodmap для моей клавиатуры в США:
!! swap () and []
keycode 18 = 9 bracketleft
keycode 19 = 0 bracketright
keycode 34 = parenleft braceleft
keycode 35 = parenright braceright
"... так много паренетезиса"
первое, что я сделал, это привязать " ("ключ к последовательности" ( " + " ) " +right (), поэтому моя скобка автоматически балансирует, оставляя половину того, что осталось ввести при написании нового кода.
вам также нужен удобный способ навигации по одному paren -- bind C -] для поиска последовательности (')')+right (). Авторство становится короче, так как вам не нужно отрывать руки от домашней позиции - просто введите C -] каждый раз, когда вы завершаете S-expr.
следующее, что я сделал, это привязать ключ к подпрограмме, которая толкает существующий элемент в текущий список ... поэтому, если / / является позицией курсора, то эта команда преобразует:
(if (< //) (+ x 1)
(x)
(y))
to
(if (< (+ x 1) //)
(x)
(y))
эффективное нажатие одного элемента справа в текущий список - очень полезно для редактирования существующего кода. Последовательность ' ( ' ,'
@jamesnvc, Я не думал о привязке () к [] ключам... Я должен попробовать, thx!
Мне приходится убирать пальцы с главного ряда, чтобы связаться со всеми остальными операторами смены, поэтому я никогда об этом не думал.
и как только вы набираете левый-parens, электрические-parens дают вам право.
Если вы используете круглые скобки больше, чем квадратные скобки, обязательно переназначьте. Я не вижу, как это может создать больше проблем, чем, скажем, левша, меняющий кнопки мыши.
когда я пишу код, я обычно трачу гораздо больше времени на размышления и чтение кода, чем на его ввод. В прошлом я пару раз пытался переключиться на раскладку клавиатуры Dvorak, но у меня нет очевидной мотивации, потому что я могу печатать намного быстрее, чем я могу думать. Синтаксис языка программирования аналогичная проблема-до тех пор, пока я могу ввести код, не выходя из клавиатуры (т. е. использование мыши было бы плохо), я счастлив.
в основном, я просто набираю их, но иногда я использую M-( и M-) (особенно когда я добавляю привязку LET "в конце этапа"), чтобы заключить соответствующий nnumber выражений.
Я также изменил раскладку клавиатуры (dvorak) (через xmodmap), чтобы переключить скобки ("[]") и parens, в сочетании с paredit-mode
(к чему действительно нужно привыкнуть).
Я использую пакеты paredit и pair-mode, но для быстрого ввода скобок я использую electric-dot-and-dash для замены двойного периода в A () на задержке 5 мс (если я набираю медленно, я получаю две точки). Это замечательный пакет (я немного взломал для моих личных предпочтений; когда я печатаю с клавиатурой Dvorak, Я заменил клавишу тире косой чертой (//не так распространен в lisp)).
чтобы избежать беспорядка в parens, я добавляю пакет с именем "выделить скобки" в мой набор инструментов и для максимального эффективность на sexp grabbings или текстовой навигации в целом, я также использую vimpulse (как я наркоман ВИМ).
drscheme выступает есть коды для круглых и квадратных скобок полистай по умолчанию. У него также есть функция, где он волшебным образом угадывает, какой из двух вы имели в виду, поэтому вы редко достигаете shift-9.
кряк имеет аналогичную функцию с функцией DrScheme.
DivaScheme (мой редактор) - это нечто совершенно иное. Он редактируется на уровне sexp, так что родители больше не мешают.
Rebind capslock to " ("и иметь редактор autoinsert") " для вас.
(Это также помогает для других языков с большим количеством скобок, например HTML...)
Я использую Vim с vim-sexp и vim-sexp-сопоставления-для-обычных-людей нанес <leader>u
поставить меня в нормальный режим внутри нового (
.
map <leader>u i(