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