2

(+ 100 (+ 100 100))部品を評価する良い方法は何ですか?

(+ (+ 1 2) (+ 100 (+ 100 100)))

?

今のところ、私は Cx Ce でそれを行います。つまり、終わりの括弧を見つける必要がありますが、これはほとんどの場合困難です。Options > Paren Matching Highlighting役立ちますが、強調表示された一致が開始括弧になるまで、カーソルを終了括弧に向かって移動する必要があります。

1 つの方法は、Cx Ce の逆バージョンを使用することです。これにより、次のように開始括弧にカーソルを配置できます。

(+ (+ 1 2) |(+ 100 (+ 100 100)))

次に、適切なキーバインドを押します。

または、カーソルを式内に配置できますが、より小さな式内には配置できません。

(+ (+ 1 2) (+ | 100 (+ 100 100)))

キーバインディングを押します。ターゲットが大きいほど、ターゲットを狙うのが簡単だからです。

どうすればそのようなコマンドを作成できますか? それともすでに提供されていますか?

補足: バーカーソルとボックスカーソル

ボックス カーソル (デフォルト) を使用する Emacsers は、上記のバー表記でカーソルをどこに置いているのか疑問に思うかもしれません。emacs では、ボックス カーソルまたはバー カーソルを選択できます(bar-cursor-mode t)。バー カーソルが文字 A と B の間にある場合、ボックス カーソルは B にあります。つまり、バーはボックスの左側の壁です。

ところで、バー カーソルの概念は、いくつかの変わった方法で役立ちます。プログラミングで index1 から index2-1 まで反復処理を行うと、初心者は驚きます。インデックス 1 とインデックス 2 は、ボックスではなくバー (左の壁) を示していると想像するのに役立ちます。

4

4 に答える 4

3

次のいずれかまたは両方にキーをバインドします。

(defun eval-next-sexp ()
  (interactive)
  (save-excursion
    (forward-sexp)
    (eval-last-sexp nil)))

(defun eval-surrounding-sexp (levels)
  (interactive "p")
  (save-excursion
    (up-list (abs levels))
    (eval-last-sexp nil)))

少し関係がありますが、s 式の操作にはpareditを強くお勧めします。構造編集コマンドとバインディングにより、S 式の編集が簡単になります。これは C-down を にバインドするup-listため、eval-surrounding-sexp上記は C-down Cx Ce とほぼ同じです (唯一の違いは、関数がsave-excursion動きを防ぐために使用することです)。

于 2010-01-31T18:43:16.107 に答える
2

そのようなコマンドは次のように書くことができます:

(require 'thingatpt)
(defun eval-sexp-at-or-surrounding-pt ()
  "evaluate the sexp following the point, or surrounding the point"
  (interactive)
  (save-excursion
    (forward-char 1)
    (if (search-backward "(" nil t)
        (message "%s" (eval (read-from-whole-string (thing-at-point 'sexp)))))))
于 2010-01-31T17:02:46.657 に答える
0

つららには、あなたが望むことをするための一般的な方法があります。

デフォルトでは、ミニバッファー内は、ミニバッファーM-.のポイント (またはその近く) にテキストを挿入するコマンドにバインドされています (入力したり、他の操作を行ったりするのではなく、挿入するだけです)。

たとえば、 を使用M-:して Lisp の sexp を評価し、 を使用M-.して at/near ポイントの sexp を取得できます。

繰り返すM-.と、今つかんだものをドロップし、他の種類のもの (テキスト) をポイント/近くでつかみ、それを挿入します。デフォルトでは、次の種類の THING を順番に実行します。

を。Lisp シンボルまたはファイル名。

b. アクティブな領域 (選択したテキスト) または単語。

c. 最も直接的なリスト。

d. 次に大きいリスト。

e. 次に大きいリスト。

f. 関数がffap-guesser推測するファイルまたは URL。

g. 関数がthing-at-point-url-at-point推測する任意の URL。

これはあなたの例にとって何を意味します(+ (+ 1 2) (+ 100 (+ 100 100)))か?

たとえば、ポイントが1最後から 2 番目の の前にある場合、これらは、繰り返し100ヒットしたときにミニバッファーに連続して挿入される Sexp です。M-.

を。+

b.100

c.(+ 100 100)

d.(+ 100 (+ 100 100))

e. (+ (+ 1 2) (+ 100 (+ 100 100)))?

したがって、最大の囲みリストを挿入するにはM-: M-. M-. M-. M-. M-.、つまりM-.5 回ヒットします。

この動作、特にリストを正確に取得するには、ライブラリThing At Point+も必要です。

于 2011-08-21T22:34:07.950 に答える
-1

組み込みがありeval-defunます。デフォルトでは -- にバインドされていCます。それはあなたが望むものに似ていますが、最上位の defun を評価します。おそらく、あなたはそれを適応させることができます。Mx

于 2010-01-31T17:14:18.000 に答える