Emacs web模式选项卡无法工作



我正在使用emacs web模式来编辑我的php文件,并注意到在几种不同的情况下,tab键的工作方式与我预期的不同。例如,如果我有一个像这样跨越多行的字符串。。。

<?php
return "
<nav>
<a href='index.php?page=skills'>My skills and background</a>
<a href='index.php?page=projects'>Some projects</a>
</nav>
";
?>

然后我转到带有锚标签的行的开头,然后按tab键,什么都没发生。我必须用空格键按我想要的方式缩进行。

另一种情况发生在php块内部,例如

<?php 
error_reporting( E_ALL );
ini_set( "display_errors", 1);
$pageData = new stdClass();
$pageData->title = "Jordan: Portfolio site";
$pageData->content = include_once "views/navigation.php";
$navigationIsClicked = isset($_GET['page']);
if($navigationIsClicked) {
    $fileToLoad = $_GET['page'];
    $pageData->content .= "<p>Will soon load $fileToLoad.php</p>";
}
$page = include_once "templates/page.php";
echo $page;
?>

如果我转到其中一个变量赋值行并按下制表符,则不会发生任何事情,空格也可以正常工作,那么在if块内只允许使用1个制表符。有什么方法可以改变这种模式如何使用我的.emacs文件中的选项卡吗。我目前在.emacs 中有这个

(defun my-setup-php ()
  ;; enable web mode
  (web-mode)
  ;; make these variables local
  (make-local-variable 'web-mode-code-indent-offset)
  (make-local-variable 'web-mode-markup-indent-offset)
  (make-local-variable 'web-mode-css-indent-offset)
  ;; set indentation, can set different indentation level for different code type
  (setq web-mode-code-indent-offset 4)
  (setq web-mode-css-indent-offset 2)
  (setq web-mode-markup-indent-offset 2))

(add-to-list 'auto-mode-alist '("\.php$" . my-setup-php))

事实证明,我的问题与web模式完全无关。emacs默认绑定到tab键的函数称为indent-for-tab-command,我正在寻找的函数名为tab-to-tab-stop,默认绑定到M-I。本网站非常详细地解释了tab键在emacs中的工作原理以及如何自定义它。

您应该尝试(setq-default indent-tabs-mode t)

最新更新