2

行複製用の関数を作成しようとしています。カーソル位置を維持する必要があります。これは .emacs ファイルのコードです:

(defun line-duplicate
  "line duplication."
  (setq position (point))       ;Store the original position of cursor               
  (global-set-key "\C-d" "\C-a\C-k\C-k\C-y\C-y")
  (goto-char position)            ;move the cursor to original position
)

(line-duplicate)

ただし、いくつかのエラーが発生しています。間違いは何ですか?

編集

コマンド実行機能を発見しました:

(defun line-duplicate ()
  (interactive)
  (setq position (point))
  (command-execute (kbd "C-a C-k C-k C-y C-y"))
  (goto-char position)
)

(global-set-key (kbd "C-d") 'line-duplicate)

そして、これはうまくいきました。

4

2 に答える 2

1

重複する行をにバインドしたいと思いますC-d

次の関数を書くことができます:

(defun my:dublicate-line ()
  (interactive)
  (save-excursion
  (let ((begin (line-beginning-position)) (end (line-end-position)))
    (move-beginning-of-line 2)
    (insert (concat  (buffer-substring-no-properties begin end) "\n")))))

(global-set-key (kbd "C-d") 'my:dublicate-line)
于 2012-09-28T17:44:47.053 に答える
1

global-set-key2 つの引数を取りKEYますCOMMANDCOMMANDはキー シーケンスではなく、関数です (通常は、対話的に呼び出し可能な関数を指定するシンボルです。ドキュメントには記載されています)。関数が呼び出されたときの動作を変更したくないC-d場合は、関数をキーにバインドする必要があります。

于 2012-09-28T17:37:29.247 に答える