كيف تكتب lisp بكفاءة، مع الكثير من الأقواس؟ [مغلق

StackOverflow https://stackoverflow.com/questions/386854

سؤال

أحاول الاحتفاظ بأصابعي على الصف المنزل قدر الإمكان.

كتابة جميع الأقواس تجعلني ابتعد عن بعض الشيء.

أنا استخدم emacs؛ الأقواس نفسها ليست مشكلة، أنا مرتاح لهم. وأنا لا أحب الأوضاع التي تكتبها بالنسبة لي تلقائيا.

لقد فكرت في إعادة تعيين الأقواس المربعة إلى الأقواس والعكس صحيح. هل هذه فكرة جيدة؟ ماذا يفعل البقية؟

هل كانت مفيدة؟

المحلول

أنا شخصيا أوصي التحرير والسرد الفتاكة emacs., الوحل & paredit.el.يسمح لك Paredit بتحرير كود LISP نصف دفتريا في مستوى Sexp، وهذا يجعل الأقواس تختفي بالكامل تقريبا. يمكنك التحرك حول Sexps كما لو كانت كلمات بسيطة وحتى التحريض عليها مع اثنين فقط من السكتات الدماغية. هناك أيضا وضع بسيط يسمى redshank. والتي تعمل جنبا إلى جنب مع الباراديت وهذا يوفر قوة أكثر.

النظر في هذه الأمثلة بسيطة (| هو موضع المؤشر):

(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 الشائعة الخطيرة في وقتي، وقد أثبتت الباراديت أنها لا تقدر بثمن. لا أستطيع حتى التفكير في كتابة رمز LISP غير تافهة دون صندوق الأدوات. وبعد كل ما يجب أن يكون عليه؛ يجب ألا تضطر أبدا إلى حساب أو تطابق أقواسك ... بمجرد أن تختفي Paredit، ستتختفي الأقواس من أمام عينيك.

سيساعد إعادة تعيين [] إلى ()، ولكنك ستتوقف عن الرعاية بعد البدء في استخدام Paredit.

لا تتردد في استخدام أجزاء محددة LISP من بلدي dot-emacs.

نصائح أخرى

مع العديد من تخطيطات لوحة المفاتيح غير الأمريكية، تكون الأقواس أو الأقواس المربعة أكثر مروعة من كتابة الأقواس، على أي حال، مما يجعل البرمجة في معظم اللغات مصادقة للغاية، لذلك اعتبر نفسك محظوظا. ؛)

بالنسبة لي، استخدم تخطيط لوحة مفاتيح غير قياسي غير قياسي مبرمج يتيح لي كتابة الأقواس عبر [Super] -J و [Super] -k.

آخذ أصابعي قبالة مفاتيح المنزل ....

لدي دواسات قدم. Leftfoot = Open paren، rightfoot = close paren.

حسنا، أنا لا، لكنني لا أستخدم LISP. لا يبدو وكأنه فكرة سيئة، رغم ذلك.

هل يمكن أن تتخيل اختلافا على LISP التي استخدمت المسافة البادئة بدلا من الشجاعة؟ (أخذ صفحة من Python Spec)

حاولت إعادة صياغة في EMACS، لكنها تنشئ مشاكل جديدة: قل أنك تحرير في نافذة محطة من خلال SSH ولصق مقتطف في النافذة؛ ثم يتم تبديل الشجاعة والأقواس في لصقك، وليس فقط الكتابة الخاصة بك. إذا حاولت ذلك، REMAP على مستوى أقل في نظامك، مثل XModmap.

(بالطبع، فإن المشكلة الأخرى الواضحة تستخدم أجهزة كمبيوتر أخرى دون إعادة تعيينك. كان ذلك مصدر إزعاج أيضا، على الرغم من الاحتمالية.)

أنا ممنوحة [] إلى () مع xmodmap ومثلها. كان من الغريب بعض الشيء تعتاد على كتابة التعليمات البرمجية في اللغات التي تستخدمها []، ولكن مثل أي تغيير، تعتاد على ذلك. إن وجود خيوط غير مألوف في LISP هو أجمل من عدم وجود أقواس غير مثبتة بلغات أخرى، لذلك يعمل.

على أي حال، هنا هو تعويذة XModmap اللازمة لوحتي الخاصة بي:

!! swap () and []
keycode  18 = 9 bracketleft
keycode  19 = 0 bracketright
keycode  34 = parenleft braceleft
keycode  35 = parenright braceright

"... الكثير من الضربات"

أول شيء قمت به هو ربط "(مفتاح التسلسل" ('+') '+ right ()، لذلك رصيد تلقائي الأقواس، وترك النصف أكبر عدد ممكن من اليسار عند كتابة رمز جديد.

تريد أيضا وسيلة مريحة للتنقل عن تبين واحد - ربط C-] إلى البحث التسلسل (')') + اليمين (). يصبح التأليف أقصر الآن، لأنك لا تحتاج إلى إخراج المنصب في المنزل - فقط اكتب C-] في كل مرة تقوم فيها بإكمال S-EXPR.

الشيء التالي الذي قمت به هو ربط مفتاح تحت الروتين الفرعي الذي يدفع عنصر موجود إلى القائمة الحالية ... لذلك إذا كان // هو موضع المؤشر، فسوف يتحول هذا الأمر:

(if (< //) (+ x 1) 
    (x) 
  (y))

ل

(if (< (+ x 1) //)
    (x) 
  (y))

دفع بند واحد من اليمين إلى القائمة الحالية - مفيدة للغاية لتحرير التعليمات البرمجية الموجودة. التسلسل '('، '<' '، cs-]، Space، "2" يضيف "قارن أقل من 2" إلى تعبير موجود. جنبا إلى جنب مع C-]، وهذا يتيح لك بناء تعبيرات جديدة بسرعة كبيرة من تلك الموجودة.

@ jamesnvc، لم أفكر في مفاتيح الربط () إلى [] مفاتيح ... سأحاول تجربة ذلك، THX!

يجب أن أخرج أصابعي من الصف المنزل للوصول إلى جميع مشغلي الأرقام الأخرى، لذلك لم أفكر في ذلك كثيرا.

وبمجرد كتابة النمو اليسرى، تعطيك الكهرباء الكهربائية الحق.

إذا كنت تستخدم الأقواس أكثر من الأقواس المربعة، فكل الوسائل، REMAP بعيدا. لا أرى كيف يمكن أن تشكل أي مشاكل أكثر من، على سبيل المثال، تبادل الأزرار المباشرة لها.

عندما أكتب التعليمات البرمجية، أقضي المزيد من الوقت في التفكير وقراءة التعليمات البرمجية، مما أفعله. لقد جربت عدة مرات في الماضي للتبديل إلى تخطيط لوحة مفاتيح DVORAK، لكنني أفتقر إلى الدافع الواضح لأنني يمكنني كتابة أسرع بكثير مما يمكنني التفكير فيه. عبارة عن بناء جملة لغة البرمجة هي مشكلة مماثلة - طالما يمكنني كتابة التعليمات البرمجية دون مغادرة لوحة المفاتيح (أي. باستخدام الماوس سيكون سيئا)، أنا سعيد.

في الغالب، أنا فقط اكتبها، ولكن في بعض الأحيان، يمكنني استخدام M- (و M-) (خاصة عندما أضيف ذلك، دع ملزما "في وقت متأخر من المرحلة")، لإرفاق عدد التعبيرات ذات الصلة.

لقد غيرت أيضا تخطيط لوحة المفاتيح (DVORAK) الخاص بي (عبر XMODMAP) لتبديل الأقواس ([]) والجهاض، بالتزامن مع paredit-mode (الذي يستغرق بالفعل بعض التعود على).

أستخدم حزم Paredit و Mode Package ولكن، لكتابة الأقواس السريعة، استخدم DOT-Dash الكهربائية لاستبدال فترة مزدوجة في A () على تأخير 5 مللي ثانية (إذا قمت بكتابة ببطء أحصل على نقطة إذن). إنها حزمة رائعة (اخترقت قليلا لتفضيلاتي الشخصية؛ كما اكتبت مع لوحة مفاتيح DVorak، استبدلت مفتاح Dash بواسطة Shash (// غير شائع جدا في LISP)).

لتجنب الفوضى في الشجاعة، أقوم بإضافة حزمة تسمى "تسليط الضوء على الأقواس إلى مجموعة الأدوات الخاصة بي، وعلى أقصى قدر من الكفاءة على Grabbings Sexp أو التنقل النصي بشكل عام، كما أستخدم VIMPULSE (كما أنا مدمن VIM).

drscheme. لديه ضربات المفاتيح للتجديدات والحمامات المربعة انقلبت افتراضيا. كما أن لديها ميزة حيث تخمين بطريقة سحرية أي واحد من الاثنين الذي تقصد، لذلك نادرا ما تصل إلى SHIFT-9.

الدجال لديه ميزة مماثلة لتلك drscheme.

Divascheme. (محرري)، هو شيء مختلف تماما. تحريرها على مستوى Sexp، بحيث لم تعد الشهادة في الطريق.

Rebind Capslock إلى "(" ("ولها محرر Autoinsert") "بالنسبة لك.

(هذا يساعد أيضا على لغات أخرى مع الكثير من الأقواس، على سبيل المثال HTML ...)

أنا استخدم VIM مع vim-sypp. و VIM-Sexp-Mappings-for-for-bey ثم وضعت <leader>u لوضعني في الوضع الطبيعي داخل جديد (.

map <leader>u i(

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top