2012-09-03 105 views
1

我使用Emacs用php-mode.el:http://php-mode.sourceforge.net/php-mode.el.htmlEmacs的PHP縮進

我在.emacs文件下面幾行:

(load-file "~/.emacs.d/php-mode.el") 
(require 'php-mode) 
(setq c-default-style "linux" c-basic-offset 4) 

據工作真的很好大部分。問題是,對於某些代碼段,Emacs以不同於其他編輯器的方式顯示代碼。例如,我在Emacs以下代碼:

public function showStuff($items, $Stuff) { 
    $restrict = true; 
    $stuff = false; 
    $moreStuff = true; 

    if (($restrict && $stuff >= $moreStuff) 
     || ($moreStuff > 10)) { 
     return true; 
    }   
    return false; 
} 

但觀察Eclipse中的同一個文件/崇高文本/文本牧馬人的樣子:

public function showStuff($items, $Stuff) { 
    $restrict = true; 
    $stuff = false; 
    $moreStuff = true; 

    if (($restrict && $stuff >= $moreStuff) 
    || ($moreStuff > 10)) { 
    return true; 
    }   
    return false; 
} 

可爲什麼我看到這些人評論結果和可能的解決方案?

謝謝。

+1

當您詢問有關第三方庫時,請始終提供鏈接。有多個php-mode.el。 – phils

+1

我最好的猜測是你的文件使用標籤('\ t')來縮進if塊,Emacs縮進像8個空格和其他編輯器縮進4個空格。你能證實嗎? – Thomas

+1

'M-x空白模式RET'會顯示您是否將縮進的製表符和空格混合在一起。 – phils

回答

6

,因爲它似乎要使用空格,而不是標籤,我覺得這是基本的副本:

I can't find this: How do I use 4 SPACES instead of a TAB in EMACS?

或者,如果你想這僅適用於PHP文件,那麼你可以使用:

(add-hook 'php-mode-hook 'my-php-mode-hook) 
(defun my-php-mode-hook() 
    "My PHP mode configuration." 
    (setq indent-tabs-mode nil 
     tab-width 4 
     c-basic-offset 4)) 

在此之前,以尋找在Emacs正確的代碼,轉換選項卡空間搭配:

  • CX^h
  • 的MxuntabifyRET

我還要看一看:
http://www.emacswiki.org/emacs/CategoryIndentation

(或注意到它,在最小縮進可能比。更棘手預計在Emacs中,並且有很多很好的信息。)

+0

感謝您的一個很好的答案,我將它添加到我的.emacs文件中,它工作的很好。我也測試了'untabify'命令,並且它也很棒。 –

1

我認爲問題在於您的Eclipse/Foo/Bar編輯器不會以標準方式在您的文件中顯示TAB(TAB一般定義爲跨越8列)。使用空格和TAB組合不成問題(如果您僅使用TAB進行縮進,則會出現類似的問題),但似乎並沒有真正需要修復的文件。解決此問題的最佳方法可能是:

  1. 向這些編輯者報告問題(這可能是次要配置問題)。
  2. 在你的.emacs中添加(setq indent-tabs-mode nil),這樣Emacs會更喜歡在任何地方使用空格來避開這些問題(它不會阻止你插入你自己的TAB,並且它不會奇蹟般地改變已經存在的TAB)。
+1

我認爲*問題*是一種可能含糊不清的縮進級別,並且在僅使用製表符(或僅空格)時不會發生,因此僅使用製表符縮進不會導致「類似問題」。 – phils

+0

@phils和Stefan感謝您的回覆。我發現很難相信問題出現在其他編輯器中,因爲Emacs是唯一以不同方式顯示縮進的編輯器。我會嘗試'(setq indent-tabs-mode nil)','tabify'和'untabify'。 phils,你的意思是'可能模糊的縮進水平'? –

+0

Tom:我只是指你正在觀察的症狀 - 給定代碼行的縮進的語義級別取決於用於查看它的編輯器。如果製表符被獨佔使用,那麼編輯器之間每個縮進的寬度仍然可能不同,但代碼的結構將始終保持清晰。 – phils