Я не могу найти это: Как я могу использовать 4 ПРОСТРАНСТВА вместо TAB в EMACS? - PullRequest
5 голосов
/ 05 марта 2010

Я делаю переход к EMACS и не могу найти то, что мне нужно сделать, в моем файле .emacs, чтобы получить php-режим И все другие режимы , чтобы вставить 4 пробела вместо TAB. Помощь

UPDATE:

Когда я нажимаю клавишу Tab, я все равно получаю 8 пробелов в простом файле с данными ответами. В режиме php я все еще получаю 2 пробела. Попадание на вкладку в режиме php ничего не делает, вкладка в обычной EMACS добавляет 8 пробелов.

UPDATE2:

Это то, что у меня есть в .emacs:

(require 'color-theme)
(color-theme-calm-forest)

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq c-basic-offset 4)

По-прежнему в обычных файлах 8 пробелов, а в PHP-файлах табуляция не работает или теперь случайным образом перемещается. Мой php-режим из Ubuntu 9.10 apt-get install php-mode


UDATE3:

ОК. Вот что я хочу ...

  1. Когда я нажимаю клавишу TAB и всегда нажимаю клавишу TAB, я хочу вставить 4 ПРОСТРАНСТВА.
  2. Я хочу, чтобы клавиша TAB переместилась в относительную позицию предыдущей строки (автоматическая вкладка до последней строки, снова ввод в ПРОБЕЛЫ)

Эти правила должны применяться к всем файлам , но при необходимости необходимо в первую очередь применять к (текстовым) и файлам PHP.

Ответы [ 5 ]

9 голосов
/ 05 марта 2010

Измените переменную indent-tabs-mode на nil. Вы можете сделать это в интерактивном режиме (только для одного буфера) с помощью M-x set-variable. Чтобы сделать его постоянным (и для всех буферов), поставьте

 (setq-default indent-tabs-mode nil)

в вашем файле инициализации.

Чтобы сделать вкладку в большинстве режимов, используйте всего 4 пробела, также добавьте

 (setq-default tab-width 4)

Для режимов на основе C (например, PHP) вам нужно сделать:

(setq c-basic-offset 4)
3 голосов
/ 12 октября 2012

Вам не хватает (setq c-basic-indent 4).Таким образом, вы должны иметь:

;; 4 spaces rather than tabs
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq c-basic-offset 4)
(setq c-basic-indent 4)
2 голосов
/ 16 октября 2012

Поведение TAB по умолчанию в Emacs (в режимах программирования) заключается в автоматическом отступе правильного места , где это место определяется на основе правил отступа, описанных основным режимом (это один из самых важная работа мажорного режима, на самом деле, гораздо более сложная в целом, чем цветная подсветка). Конечно, если строка уже имеет отступ в нужном месте, нажатие клавиши TAB ничего не изменит.

Таким образом, вы можете заставить TAB вести себя глупо, как вы просите, но тогда вы пропустите большую часть удовольствия. Например. Вы могли бы сделать что-то вроде

(global-set-key "\t"
  (lambda ()
    (interactive)
    (let ((prevline-indent (save-excursion (forward-line -1) (current-indentation))))
      (if (< (current-column) prevline-indent))
          (indent-to prevline-indent)
        (insert "    ")))))

Но вместо этого я рекомендую вам использовать TAB так, как это задумал Emacs, и объяснить Emacs, как вы хотите, чтобы ваш код был с отступом. Возможно, установив что-то вроде:

(setq-default indent-tabs-mode nil) ;; Prefer SPC over TAB when indenting.
(setq c-basic-offset 4)             ;; I like indenting by 4 spaces.

Из того, что вы говорите, отступ в TAB в вашем php-режиме работает неправильно, поэтому в вашем php-режиме может быть просто ошибка. Скажите нам точно, в каком случае он работает неправильно, показав текст с неверным отступом и объяснив, каким образом отступ не соответствует вашим ожиданиям.

0 голосов
/ 06 марта 2010

Это то, что я сделал.

;;;; Tab settings ;;;;
;Tab width is 3
(setq tab-width 3)
(setq-default tab-width 3) ;;going to force it. yessir.
;Use spaces always.
(setq-default indent-tabs-mode nil)
;Jump by 3.
(setq c-basic-offset 3)
;this defaulted to 4 and had to be reset to 3. the prior settings did not override it. Lame.
(setq perl-indent-level 3)
;Tab stop list out to col 60
;Manually set by x3
(setq tab-stop-list '(3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60))
0 голосов
/ 05 марта 2010

Вы можете использовать M-x untabify для преобразования всех вкладок в пробелы.

Ну, в этом случае вы можете установить значение indent-tabs-mode в nil для своего второстепенного режима php.

Вы также можете найти вики: http://www.fnal.gov/docs/products/emacs/emacs/emacs_23.html#SEC185 и пост Джейми Завински: http://www.jwz.org/doc/tabs-vs-spaces.html, чтобы быть информативными.

...