Как сделать так, чтобы вкладка вставляла заданное количество пробелов в Emacs

Я не хочу использовать вкладки в emacs, я хотел бы установить его так, чтобы нажатие клавиши tab вставляло заданное количество пробелов в зависимости от типа файла. Например, я хотел бы нажать tab, чтобы вставить 4 пробела при работе с файлом python. Вот мой ток .emacs

(setq-default indent-tabs-mode nil)
(setq tab-width 4)
(setq tab-stop-list (number-sequence 4 200 4))

В настоящее время всякий раз, когда я нажимаю tab, он добавляет только пробелы, если это то, что emacs считает правильным местом. Например, если я открою файл python и нажму tab, ничего не произойдет. Однако, если я наберу «if:» и затем нажму tab на следующей строке, это добавит 4 пробела. Однако, если я нажал tab снова, он возвращает меня к началу строки. Я думаю, что я просто хотел бы сделать так, чтобы он добавил определенное количество пробелов, простых и простых(если кто-то не может дать мне хорошую причину, почему полезно иметь tab cycle through the line).

Основная причина, по которой я хочу этого, заключается в том, что я работаю над проектом, где комментарий следует определенному формату, включающему использование отступов на основе наборов из 4 пространств.
Например:

    r"""
    Return the value of the q-gamma function. 

    .. MATH::

        qgamma(z,q) = Gamma_q (z).
    """

Так, для строки с «qgamma», я должен начать его с 8 пробелов, и я хотел бы иметь возможность od, что, нажав tab дважды. Однако emacs не думает, что это подходящее место, чтобы иметь возможность дважды вкладывать, поэтому всякий раз, когда я нажимаю tab дважды, это возвращает меня к началу строки.

Спасибо!

Edit: проверка основной переменной mode говорит, что она находится в python-режиме.

2 ответа

  1. M-x customize, поискpy-tab-indent, выключить его и Apply. Я считаю, что это поведение, которое вы ищете. Протестируйте его, и если да, Apply and Saveто настройка.

    Отмечая, как отметил @jpkotta , что выше Дляpython-mode.el, а не встроенный python.el.

  2. Если вы используете встроенныйpython.el, вы можете установить indent-line-functionindent-relativeвместо python-indent-line-functionin python-mode-hook.

    (defun jpk/python-mode-hook ()
      (setq indent-line-function #'indent-relative))
    (add-hook 'python-mode-hook #'jpk/python-mode-hook)
    

    Каждый основной режим имеет свою собственную функцию отступа, на которую указывает indent-line-functionпеременная. indent-relativeочень основная, родовая функция вмятия, и использована для fundamental-mode(самого основного главного режима).


    Python немного странно в Emacs в том, что он имеет два широко используемых основных режима, встроенный python.elи сторонних python-mode.el. Используйте то, что вы хотите, но имейте в виду, какие вы используете и какие люди ссылаются на статьи и так ответы.