Как эффективно набирать текст с таким количеством скобок?

Я стараюсь держать пальцы на домашнем ряду как можно больше.

Ввод всех скобок заставляет меня отойти оттуда.

Я использую 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...)

Другие вопросы по тегам