2010-03-05 33 views
5

Tôi đang chuyển sang EMACS, và tôi không thể tìm thấy những gì tôi cần làm trong tập tin .emacs để lấy chế độ php VÀ tất cả các chế độ khác để chèn 4 dấu cách thay vì TAB. Cứu giúp?Tôi không thể tìm thấy điều này: Làm cách nào để sử dụng 4 SPACES thay vì TAB trong EMACS?

CẬP NHẬT:

Khi tôi nhấn tab Tôi vẫn nhận được 8 dấu cách trong một tệp thuần túy có câu trả lời nhất định. Trong chế độ php tôi vẫn nhận được 2 dấu cách. Nhấn tab trong chế độ php không có gì, tab trong EMACS thường xuyên thêm 8 dấu cách.

UPDATE2:

Đây là những gì tôi có trong .emacs tôi:

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

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

Tuy nhiên trong các tập tin thường xuyên 8 gian, và trong PHP tập tin tabbing không làm việc, hoặc nhảy xung quanh một cách ngẫu nhiên bây giờ. php-mode của tôi là từ Ubuntu 9,10 apt-get install php-mode


UDATE3:

OK Dưới đây là những gì tôi muốn ...

  1. Khi tôi nhấn phím Tab, và khi tôi luôn luôn nhấn phím TAB, tôi muốn chèn 4 SPACES.
  2. Tôi muốn phím TAB để chuyển đến vị trí tương đối của các dòng trước đó (tự động tab lên đến dòng cuối cùng, một lần nữa bước vào trong không gian)

Những quy định này cần phải áp dụng đối với tất cả các file nhưng nếu cần thiết đầu tiên và quan trọng nhất áp dụng cho các tập tin (văn bản) và PHP.

Trả lời

9

Thay đổi biến thụt lề-tab thành chế độ không. Bạn có thể thực hiện tương tác (chỉ với một bộ đệm) theo M-x set-variable. Để làm cho nó vĩnh viễn (và cho tất cả các bộ đệm), hãy đặt

(setq-default indent-tabs-mode nil) 

trong tệp init của bạn.

Để thực hiện một tab làm chỉ 4 chỗ trong hầu hết các chế độ, cũng thêm

(setq-default tab-width 4) 

Đối với chế độ C dựa (như PHP), bạn sẽ phải làm:

(setq c-basic-offset 4) 
+0

OK, điều đó đã không giúp đỡ trong chế độ php (vẫn còn 2) và để chỉnh sửa chung nó đã sử dụng 8 dấu cách. – Urda

+0

Đã thêm một dòng về cách thay đổi thành 4 không gian trong chỉnh sửa chung. Chế độ Php có thể có cài đặt riêng cho điều này. –

+0

Bạn có lỗi cú pháp. Tôi sẽ giả sử nó là '(setq-tab mặc định chiều rộng 4)' Và điều đó không giúp gì cả. Và có, tôi đảm bảo EMACS đang sử dụng cấu hình mới mỗi lần tôi thử. – Urda

0

Bạn có thể sử dụng M-x untabify để chuyển đổi tất cả các tab thành dấu cách.

Trong trường hợp đó, bạn có thể đặt giá trị indent-tabs-mode thành nil cho chế độ nhỏ của php.

Bạn cũng có thể tìm thấy wiki: http://www.fnal.gov/docs/products/emacs/emacs/emacs_23.html#SEC185 và bài đăng của Jamie Zawinski: http://www.jwz.org/doc/tabs-vs-spaces.html để có thông tin.

+0

OK, điều cần biết. Nhưng tôi muốn đây là một cài đặt vĩnh viễn khi tôi chỉnh sửa các tệp trong PHP và các chế độ khác. – Urda

0

Đây là những gì tôi 'đã thực hiện.

;;;; 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

Tại sao bạn có 2 '(setq-default tab-width 3)' liên tiếp? – Gabe

+0

Quá ngu xuẩn. Tại sao bạn hỏi? –

3

Bạn đang thiếu (setq c-basic-indent 4).Vì vậy, bạn nên có:

;; 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) 
+1

Tôi lặp lại: do * not * thay đổi 'tab-width' trừ khi bạn * thực sự * biết bạn đang làm gì. – Stefan

2

Hành vi mặc định của TAB trong Emacs (trong chế độ lập trình) là để tự động thụt lề để đúng nơi, nơi nơi này được quyết định dựa trên các quy tắc thụt đầu dòng mô tả bởi các chế độ chính (đó là một trong những công việc quan trọng nhất của một chế độ lớn, thực sự, đòi hỏi nhiều hơn nói chung hơn là làm nổi bật màu sắc). Tất nhiên nếu dòng đã được thụt vào đúng nơi, đánh TAB sẽ không làm gì cả.

Vì vậy, bạn có thể buộc TAB hành xử theo cách câm, như bạn đang hỏi, nhưng sau đó bạn sẽ bỏ lỡ hầu hết những điều thú vị. Ví dụ: bạn có thể làm điều gì đó như

(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 " "))))) 

Nhưng thay vào đó, tôi khuyên bạn nên sử dụng TAB theo cách Emacs dự định và giải thích cho Emacs cách bạn muốn mã của bạn được thụt vào. Có lẽ bằng cách thiết lập một cái gì đó như:

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

Từ những gì bạn nói, thụt đầu dòng TAB trong php-mode của bạn không hoạt động đúng, vì vậy có thể đơn giản là một lỗi trong php-mode của bạn. Hãy cho chúng tôi biết chính xác trong trường hợp nào nó không hoạt động đúng, hiển thị văn bản bị thụt lề sai và giải thích theo cách nào mà thụt đầu dòng không phù hợp với mong đợi của bạn.

Các vấn đề liên quan