3

簡単に言えば、TAB キーにキーバインディングを設定しただけですが、ミニバッファーで TAB を押してコマンドをオートコンプリートしようとすると、次のメッセージが表示されて失敗します: The mark is not set now, so there is no region.

言い換えれば、カーソルが (ミニバッファーではなく) バッファー内にある場合にのみ、TAB キーバインドが必要になります。

以下の私の例では、ミニバッファでオートコンプリートを失うことなく、バッファでテキスト/基本モードにいるときにタブをインデントするように設定するにはどうすればよいですか? 次の機能とキーバインディングがあります。

;; Shift the selected region right if distance is postive, left if
;; negative

 (defun shift-region (distance)
   (let ((mark (mark)))
     (save-excursion
       (indent-rigidly (region-beginning) (region-end) distance)
       (push-mark mark t t)
       ;; Tell the command loop not to deactivate the mark
       ;; for transient mark mode
       (setq deactivate-mark nil))))

(defun shift-right ()
  (interactive)
  (shift-region 2))

(defun shift-left ()
  (interactive)
  (shift-region -2))

;; Bind (shift-right) and (shift-left) function to your favorite keys. I use
;; the following so that Ctrl-Shift-Right Arrow moves selected text one 
;; column to the right, Ctrl-Shift-Left Arrow moves selected text one
;; column to the left:

;; (global-set-key [C-S-right] 'shift-right)
;; (global-set-key [C-S-left] 'shift-left)
(global-set-key [tab] 'shift-right)
(global-set-key [backtab] 'shift-left)
4

3 に答える 3

4

他の人が言ったことに加えて:

  1. 通常、TABキーはと同じではありません<tab>。これは、 を指定して使用するものです[tab]TABキーは と同じで、C-iを使用(kbd "TAB")してバインドできます。

  2. 必要に応じて、行ったように、先に進んでTABのコマンドにバインドできますglobal-mapが、ミニバッファーのキーマップのそれぞれで好きなコマンドに再バインドすることで、ミニバッファーのそれをオーバーライドできます。

    たとえば、通常のミニバッファ バインディングが必要な場合はTAB、次のようにします。

    1. emacs -Q(init ファイルなし)を使用して Emacs を起動します。

    2. 必要に応じて、デフォルト以外のミニバッファ バインディングを作成するライブラリをロードしますTAB(例: autocomplete?)。

    3. ライブラリをロードして、グローバルにバインドされたhelp-fns+.elコマンドを取得します。describe-keymapC-h M-k

    4. お使いのバージョンの Emacs で使用される各ミニバッファー キーマップC-h M-kのバインドを確認するために使用します。TABこれにはminibuffer-local-mapminibuffer-local-completion-map、およびが含まminibuffer-local-must-match-mapれますが、さらに含まれる場合もあります。(elisp) Completion Commandsミニバッファーのキーマップ変数のリストについては、を参照してください。

      たとえばC-h M-k minibuffer-local-completion-map、そのキーマップのバインディングを表示します。リストで探しTABます。

      (ダウンロードしたくない場合はhelp-fns+.el、 を使用できますlookup-key。そのライブラリを使用すると、キーマップにキーを簡単にリストできます。)

    5. TAB非ミニバッファー指向のコマンドにグローバルにバインドした後、init ファイルでそのデフォルトのバインドにバインドします。IOW、ミニバッファーのバインディングを本来あるべき状態に戻してください。

于 2014-03-20T03:42:28.953 に答える