非常に多くの括弧を使用して Lisp を効率的に入力するにはどうすればよいでしょうか?[閉まっている]
-
23-08-2019 - |
質問
私はできるだけホームローに指を置くようにしています。
すべての括弧を入力すると、そこからかなり離れてしまいます。
私は Emacs を使用しています。括弧自体は問題ありません。私は括弧を使用することに満足しています。そして、私はそれらを自動的に入力してくれるモードが好きではありません。
角括弧を括弧に、またはその逆に再マッピングすることを考えました。これは良いアイデアですか?他の人は何をしますか?
解決
個人的にオススメしたいのは必殺コンボです Emacs, スライム & paredit.elParedit を使用すると、LISP コードを sexp レベルで擬似意味論的に編集でき、括弧がほぼ完全に消えます。sexps は単純な単語であるかのように移動でき、数回のキーストロークで変更することもできます。というマイナーモードもあります アカアシシギ これは 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 を使い始めるとあまり気にならなくなります。
ご自由にご利用ください 私の dot-emacs からの LISP 固有の部分.
他のヒント
多くの非USキーボードレイアウトでは、角括弧または中括弧を入力して、とにかく、もっと面倒な入力する括弧よりも、非常にstrainfulほとんどの言語でのプログラミングを行い、その自分は幸運を検討しています。 ;)
私として、私は私が[スーパー] -jと[スーパー] -k経由で括弧を入力でき、プログラマに優しい非標準のキーボードレイアウトを使用します。
私は....ホームキーオフ私の指を取る
私は、フットペダルを持っています。 LeftFoot =オープン括弧、RightFoot =近い括弧ます。
まあ、私にはありませんが、私は、Lispを使用しないでください。しかし、それは悪いアイデアのように見えるしていません。
あなたの代わりに括弧のインデントを使用したLispのバリエーションを想像してもらえますか? (Pythonの仕様からページを取る)
私はEmacsで再マッピングしようとしたが、それは新たな問題を作成します:あなたはSSHを介して端末ウィンドウで編集しているとあなたがウィンドウにスニペットを貼り付ける言います。その後、括弧と括弧は、あなたの貼り付けだけでなく、あなたの入力に入れ替えます。あなたはこれをしようとすると、xmodmapを同じように、あなたのシステムの下位レベルでリマップます。
(もちろん、明らかに他の問題は、あなたの再マッピングすることなく、他のコンピュータを使用している。我慢ものの、あまりにも迷惑だったこと。)
私はxmodmapを用いて、そのような[]()に再マップ。 []使用する言語でコードを書くことに慣れる少し変だったが、任意の変更のように、あなたはそれに慣れます。 Lispでシフトされていない括弧を持つことは、他の言語にシフトしていないブラケットを持っていないよりも進歩して、それがうまくいくます。
とにかく、ここに私のUSキーボードに必要なxmodmapをの呪文があります:
!! swap () and []
keycode 18 = 9 bracketleft
keycode 19 = 0 bracketright
keycode 34 = parenleft braceleft
keycode 35 = parenright braceright
"...そう多くparenethesis"
私がした最初の事は、配列の「(」キー「(」+「)」+右を()と結合して、多くの新しいコードを書くときに入力する左の半分を残して、私の括弧の自動バランスそう。
(配列検索(「)」)+右にC-]バインド) -また、便利な方法は、1つの括弧をナビゲートします。あなたがホームポジションから外れ手を取る必要はありませんようオーサリングは、今より短くなる - 。あなたはS-exprのを完了ちょうどC-]たびに入力し、
次の事は、私は現在のリスト上に既存のアイテムをプッシュサブルーチンにキーをバインドしてなかった...ので、カーソル位置が//されている場合、このコマンドは変換されます:
(if (< //) (+ x 1)
(x)
(y))
タグに
(if (< (+ x 1) //)
(x)
(y))
効果的に現在のリストに右から1つの項目をプッシュ - 既存のコードを編集するために非常に有用です。シーケンス「(」、「<」、CS-]、スペース、「2」の既存の表現に「2未満の比較」を追加します。C-と組み合わせる]、これは既存のものから非常に迅速に新しい表現を構築することができます。
@jamesnvc、 私は、[]キーに)(結合について考えていませんでした...私はそれを試してみてよ、THX!
私は、他のすべてのシフト数の事業者に到達するために自宅の行をオフに私の指を取らなければならないので、私はずっとそれについて考えたことはありません。
そして、あなたは左括弧を入力した後、電気括弧はあなたの権利を与えます。
、すべての手段によって、離れリマップ。私はそれが彼女のマウスボタンを交換左利き、たとえば、より多くの任意の問題を引き起こす可能性がどのように表示されません。
、私は一般的に、私のコードを考えて読んで多くの時間を費やしています。私は、Dvorakキーボードレイアウトに切り替えるには、過去に数回を試みたが、私は私が考えることができるよりもはるかに高速に入力することができますので、私は明白な動機を欠いています。プログラミング言語の構文は、同様の問題である - (。つまり、マウスを使用することが悪いだろう)限り、私はキーボードを離れることなく、コードを入力することができますように、私は幸せです。
。ほとんどの場合、私はちょうどそれらを入力し、時折、私はM-(およびM-)を使用します。
私も(実際に慣れるいくつかを取るん)paredit-mode
と連動して、括弧(「[]」)と括弧を切り替えるには(xmodmapを経由して)私の(ドヴォルザーク)キーボードレイアウトを変更します。
私はpareditとペアモードのパッケージを使用しますが、高速の括弧タイピングのために私はゆっくりと入力する場合、私はその後、2個のドットを取得(5ミリ秒の遅延でのdouble期間を()を交換するために、電気-一点鎖線を使用します)。それは素晴らしいパッケージだ(私は私の個人的な好みのビットをハッキングし、私がDvorakキーボードで入力すると、私は// Lispでそれほど一般的ではありません(スラッシュダッシュキーを置き換え))。
括弧内の混乱を避けるために、私は私のツールセットに「ハイライト括弧という名前のパッケージを追加し、(私はVimの常習者だとして)一般的にはS式grabbingsまたはテキストナビゲーション上の最大効率のために、私はまた、vimpulse使用しています。
DrScheme にはデフォルトで裏返さ丸括弧や角括弧のためのキーストロークを持っています。また、それは魔法のようにあなたが意味2のどちらを推測するので、あなたはめったにシフト-9のために到達しない機能を備えています。
クワックのDrSchemeと同様の機能を有している。
DivaScheme の(私の編集者)、完全に異なるものです。括弧が邪魔にもはやあるようにそれは、S式レベルで編集しません。
キャップは、あなたのために「(」、エディタの自動挿入を持っている「)」ロック再バインドます。
(これはまた、インスタンスHTMLのために、ブラケットの多くの他の言語のために役立ちます...)
私は Vim を使用しています vim-セックス そして vim-sexp-mappings-for-normal-people それからマッピングしました <leader>u
新しい環境の中で私を通常モードにするために (
.
map <leader>u i(