0

Emacs で 2 つの異なるコードベースを編集しています。1 つは 2 つのスペースに設定されたタブを使用し、もう 1 つは 8 つのスペースに設定されたタブを使用します (Linux カーネル)。カーネルは配置にタブを使用するため、カーネル ファイルの作業中にその場でタブ サイズを調整したいと考えています。

M-2 を押してタブ幅を 2 ​​に設定し、M-8 を押してタブ幅を 8 に設定できるようにしたいと考えています。C コード、Makefile、または通常のテキスト ファイルで作業しているかどうかに関係なく、これらのキーがすべてのモードで機能することを望みます。私のアクティブな Emacs コーディング スタイルの残りの部分はそのままにしておきたいと思います。

構成ファイルで「setq」を使用しているため、少し行き詰まっていますが、これは Mx で有効なコマンドではなく、関数をグローバル キー M-2 に割り当てようとしても、これに割り当てられているデフォルトの関数が上書きされません。キー、編集したいファイルの種類ごとにフックなどを使用する必要があるようですが、これはすぐに頭を悩ませています!

4

3 に答える 3

4

何かをキーにバインドするには、対話的に使用することを意図した関数の Emacs 名であるcommandである必要があるため、これは関数です。

(defun set-c-basic-offset-2 ()
  (setq c-basic-offset 2))

これはコマンドです:

(defun set-c-basic-offset-2-command ()
  (interactive)
  (setq c-basic-offset 2))

今、あなたはすることができます

(global-set-key (kbd "M-2") 'set-c-basic-offset-2-command)

または、代わりに、次のことができます

(defun set-c-basic-offset-command (offset)
  (interactive "p")
  (setq c-basic-offset offset))
(global-set-key (kbd "C-c o") 'set-c-basic-offset-command)

と を使用M-2 C-c oして、それぞれ 2 または 8M-8 C-c oに設定できます。c-basic-offset機能についてはドキュメントを読んでみてくださいinteractive。提供できる機能は他にもたくさんあります。

于 2013-04-27T11:23:04.007 に答える
1

私は、私が求めていたものを達成するために、immerrrとcamdezの答えを組み合わせて使用​​することになりました:

(defun set-tab-width (len)
    (interactive "p")
    (setq tab-width len)
    (force-window-update)  ; Required or tabs are only updated line-by-line during editing
    (message "Tab width set to %d." len)
)
(global-set-key (kbd "C-c t") 'set-tab-width)

これにより、 を押しC-8 C-c tてタブ幅を 8C-2 C-c tに設定したり、タブ幅を 2 ​​に設定したり、その他の数値を設定して異なるタブ幅を設定したりできます。

于 2014-03-16T03:12:11.647 に答える