سؤال

أنا كنت فاشل في الحصول على Emacs للتبديل من 8 الفضاء علامات التبويب إلى الفضاء 4 علامات التبويب عند الضغط على علامة التبويب في المخازن الرئيسية الوضعية ، text-mode.لقد تم إضافة التالي إلى .emacs:

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

;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)

بغض النظر عن كيف يمكنني تغيير بلدي .emacs الملف (أو العازلة المتغيرات المحلية) على علامة التبويب زر دائما يفعل الشيء نفسه.

  1. إذا كان هناك أي نص أعلاه ، indent 8 المساحات
  2. إذا كان هناك نص على السطر السابق ، indent إلى بداية الكلمة الثانية

بقدر ما أحب Emacs هذا هو الحصول على مزعج.هل هناك طريقة لجعل Emacs على الأقل indent 4 الفضاء عندما لا يوجد نص في السابق الخط ؟

هل كانت مفيدة؟

المحلول

(customize-variable (quote tab-stop-list))

أو إضافة tab-وقف قائمة الدخول إلى مخصص-مجموعة المتغيرات في .emacs ملف:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))

نصائح أخرى

الجواب القصير:

النقطة الرئيسية هي أن أقول emacs إلى إدراج ما تريد عندما الطعج ، ويتم ذلك عن طريق تغيير المسافة البادئة-خط-وظيفة.فمن الأسهل لتغيير ذلك إلى إدراج علامة التبويب ومن ثم تغيير علامات التبويب إلى 4 مساحات من تغييره إلى إدراج 4 مسافات.التكوين التالية سوف يحل مشكلتك:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

التفسير:

من المسافة البادئة التحكم الرئيسية الوضعية @ emacs دليل:

وظيفة هامة لكل الكبرى الوضع هو تخصيص مفتاح indent بشكل صحيح للغة يجري تحريرها.

[...]

المسافة البادئة-خط-وظيفة المتغير وظيفة ليتم استخدامها من قبل (، الأوامر المختلفة ، مثل عند الاتصال المسافة البادئة-المنطقة) إلى المسافة البادئة الحالي خط.الأمر المسافة البادئة-وفقا إلى وضع لا أكثر من استدعاء هذه الدالة.

[...]

القيمة الافتراضية هي البادئة-النسبية العديد من وسائط.

من المسافة البادئة-النسبية @ emacs دليل:

المسافة البادئة-نسبة المساحة إلى تحت القادم indent نقطة في السابق nonblank خط.

[...]

لو السابق nonblank خط لا indent نقطة وراء عمود نقطة يبدأ في `علامة التبويب إلى علامة التبويب توقف' يتم بدلا من ذلك.

فقط تغيير قيمة المسافة البادئة-خط-وظيفة إدراج علامة التبويب وظيفة تكوين علامة التبويب إدراج 4 مسافات.

تحديث: منذ Emacs 24.4:

tab-stop-list هو الآن ضمنا الممتدة إلى ما لا نهاية.القيمة الافتراضية هي تغيير nil وهو ما يعني علامة إيقاف كل tab-width الأعمدة.

مما يعني أنه لم يعد هناك أي حاجة إلى الإعداد tab-stop-list في الطريقة الموضحة أدناه ، كما يمكنك الاحتفاظ بها مجموعة nil.

الجواب الأصلية يلي...


دائما يؤلمني قليلا رؤية الأشياء مثل (setq tab-stop-list 4 8 12 ................) عندما number-sequence وظيفة يجلس هناك في انتظار أن يتم استخدامها.

(setq tab-stop-list (number-sequence 4 200 4))

أو

(defun my-generate-tab-stops (&optional width max)
  "Return a sequence suitable for `tab-stop-list'."
  (let* ((max-column (or max 200))
         (tab-width (or width tab-width))
         (count (/ max-column tab-width)))
    (number-sequence tab-width (* tab-width count) tab-width)))

(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))

قد تجد أنه من الأسهل إلى إنشاء علامات التبويب الخاصة بك على النحو التالي:

M-x customize-group

في Customize group: موجه أدخل indent.

ستظهر لك شاشة حيث يمكنك تعيين كل ما عليك الطعج خيارات مجموعة منهم للدورة الحالية أو حفظها لجميع الدورات المقبلة.

إذا كنت تفعل ذلك بهذه الطريقة أنت تريد أن إعداد تخصيصات الملف.

(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux") 
(setq c-basic-offset 4) 
(c-set-offset 'comment-intro 0)

هذا يعمل رمز C++ و التعليق داخل جدا

هذه المشكلة ليست بسبب فقدان علامة التبويب توقفات ؛ أنه emacs لديه (جديد؟) علامة التبويب طريقة تسمى المسافة البادئة-النسبي الذي يهدف على ما يبدو إلى خط يصل جداول البيانات.المفتاح TAB يتم تعيين إلى أسلوب المسافة البادئة-ل-tab-الأمر الذي يدعو أيا كانت الطريقة متغير المسافة البادئة-خط-وظيفة لتعيين التي هي البادئة النسبية طريقة وضع النص.أنا havn't اكتشفت طريقة جيدة لتجاوز المسافة البادئة-خط-وظيفة متغير (وضع النص ربط لا يعمل لذا ربما هو الحصول على إعادة تعيين بعد وضع السنانير تشغيل؟) ولكن طريقة واحدة بسيطة للتخلص من هذا السلوك هو فقط تشاك القصد-على-tab-القيادة الأسلوب من خلال تحديد علامة التبويب إلى أبسط علامة التبويب إلى علامة التبويب وقفة الطريقة:

(تعريف مفتاح وضع النص-خريطة (kbd "TAB") 'علامة التبويب إلى علامة التبويب توقف)

جرب هذا:

(add-hook 'text-mode-hook
  (function
   (lambda ()
     (setq tab-width 4)
     (define-key text-mode-map "\C-i" 'self-insert-command)
     )))

من شأنها أن تجعل علامة التبويب دائما إدراج الحرفي التبويب شخصية مع علامات تبويب كل 4 شخصيات (ولكن فقط في وضع النص).إذا كان هذا ليس ما تطلبه ، يرجى وصف السلوك الذي تود أن ترى.

يمكنك إضافة هذه الأسطر من التعليمات البرمجية الخاصة بك .emacs الملف.ويضيف هوك على وضع النص إلى استخدام إدراج علامة التبويب بدلا من المسافة البادئة-النسبية.

(custom-set-variables
 '(indent-line-function 'insert-tab)
 '(indent-tabs-mode t)
 '(tab-width 4))
(add-hook 'text-mode-hook
      (lambda() (setq indent-line-function 'insert-tab)))

وآمل أن يساعد.

مجرد تغيير نمط ج-مجموعة-أسلوب كان كافيا بالنسبة لي.

هذا إضافة إلى الخاصة بك .emacs الملف:

في هذا العرض على أن يتم عرض علامة التبويب 2 أحرف (تغيير عدد 2 إلى ما تريد)

(setq default-tab-width 2)

للتأكد من أن emacs هو في الواقع باستخدام علامات التبويب بدلا من المسافات:

(global-set-key (kbd "TAB") 'self-insert-command)

بوصفها جانبا ، الافتراضي emacs عندما backspacing فوق علامة التبويب إلى تحويله إلى مسافات ثم حذف الفضاء.هذا يمكن أن يكون مزعج.إذا كنت تريد أن مجرد حذف علامة التبويب يمكنك القيام بذلك:

(setq c-backspace-function 'backward-delete-char)

استمتع!

التخصيصات يمكن أن الظل (setq tab width 4) لذا إما استخدام setq-default أو السماح تخصيص تعرف ما تفعلونه.أنا أيضا قضايا مشابهة المرجع ثابتة مع هذا وحده لا تحتاج إلى ضبط tab-stop-list أو أي insert وظائف:

(custom-set-variables
 '(tab-width 4 't)
 )

وجدت من المفيد إضافة هذا مباشرة بعد (نصيحة من emacsWiki):

(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

أفضل الإجابات لم تنجح حتى كتبت هذا في .emacs الملف:

(global-set-key (kbd "TAB") 'self-insert-command)

هذا هو الحل الوحيد الذي يحافظ على علامة التبويب من أي وقت مضى الحصول على إدراج بالنسبة لي ، دون تسلسل أو التحويل من علامات التبويب المسافات.كل هذه تبدو كافية ، ولكن الإسراف:

(setq-default
    indent-tabs-mode nil
    tab-width 4
    tab-stop-list (quote (4 8))
)

علما بأن quote يحتاج إلى رقمين العمل (ولكن ليس أكثر!).

أيضا ، في معظم طرق رئيسية (Python على سبيل المثال), المسافة البادئة هو تلقائي في Emacs.إذا كنت بحاجة إلى المسافة البادئة خارج السيارات المسافة البادئة, استخدام:

م-أنا

هل حاولت

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

بالمناسبة ، ج-الوضعية ، , انا إضافة (setq-default c-basic-offset 4) إلى .emacs.انظر http://www.emacswiki.org/emacs/IndentingC للحصول على التفاصيل.

من ملف init مختلفة لأنني أردت المساحات بدلا من علامات التبويب:

(add-hook 'sql-mode-hook
          (lambda ()
             (progn
               (setq-default tab-width 4)
               (setq indent-tabs-mode nil)
               (setq indent-line-function 'tab-to-tab-stop) 
               (modify-syntax-entry ?_ "w")       ; now '_' is not considered a word-delimiter
               (modify-syntax-entry ?- "w")       ; now '-' is not considered a word-delimiter 
               )))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top