エコー領域ではなく、バッファでの算術評価の結果


10

Windows 10、Emacs 25.1

私はこれを行ういくつかの算術演算を行いたいです: ここに画像の説明を入力してください

結果はエコー領域にありますが、バッファ内のカーソル位置に結果を置きたいです。このようなもの:

ここに画像の説明を入力してください

どうすればよいですか?


それは「できない」と思われますか?もしそうなら、Emacsはあなたにとって間違ったエディタかもしれません...
wasamasa

Emacsは私にとって間違ったエディタではありません。長年使っています。私の英語でごめんなさい。私の母国語ではありません。
user8542613 2017

私のemacs設定には、この投稿の下部から取得したと思われる関数があります。
ShreevatsaR 2017

*scratch*バッファにいる場合はC-j、カーソルの前の式を評価し、式の値をバッファに配置します。
gboffi 2017

回答:


12

ショートバージョン:はい

C-x C-e式を評価する代わりに、式に前置引数を与えます。 C-u C-x C-e出力をバッファに出力します。

この情報を見つけた方法

Emacsがこれらのことをどのように行っているかを調べるには、マニュアルを調べるか 、Emacs自体に質問してください。

特定のキーバインドの機能を確認するには、C-h kdescribe-key)を使用できます。あなたはで式を評価しておりC-x C-e、そのキーバインディングがで呼び出すものを理解できますC-h k C-x C-e。コマンドのドキュメント文字列が表示されます。最初の部分は次のとおりです。

C-x C-eコマンドを実行しますeval-last-sexp(global-mapにあります)。これは、対話式にコンパイルされたLisp関数ですelisp-mode.el

にバインドされていC-x C-eます。

(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)

ポイントの前にsexpを評価します。エコー領域に値を出力します。 対話式で、-前置引数なしで、出力を現在のバッファーに出力します。

...

キーフレーズを強調表示しました。プレフィックス引数(C-u)を指定すると、エコー領域ではなくバッファに出力が出力されます。


2
それは良いですが、十分ではありません。コマンドを使用するとC-u C-x C-e、結果は(* 60 3)180になります。しかし、必要なのは(スクリーンショットのように)180だけです。
user8542613 2017

1
@ user8542613:次に、独自のコマンドを記述する必要があります。
ダン

1
@ user8542613:ドリューの答えはあなたが望んでいることと全く同じだと思います。承認された回答の切り替えを検討してください。
ダン

6

これをいくつかのキーにバインドします。

(defun foo ()
  "Replace sexp before point by result of its evaluation."
  (interactive)
  (let ((result  (pp-to-string (eval (pp-last-sexp) lexical-binding))))
    (delete-region (save-excursion (backward-sexp) (point)) (point))
    (insert result)))

3

算術演算を実行して値をバッファに挿入したいが、どこで演算を実行してもかまわない場合はC-u M-:、ミニバッファで演算情報を入力することもできます。

このブログに

(defun eval-and-replace (value)
  "Evaluate the sexp at point and replace it with its value"
  (interactive (list (eval-last-sexp nil)))
  (kill-sexp -1)
  (insert (format "%S" value)))

1

私が行うことを好む(複雑な)EmacsのCALCで計算C-x * *して、私のカーソルがしていたバッファにその結果をコピーしyqCALCバッファを閉じて、私はこの場所に戻ってきました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.