我在一个开源项目上工作,创建者将其tab-indents设置为2个空格。
我想立即为我工作的一个文件启用它,而不是其他相同类型的文件。必须有像 M-x set-tab-indent
这样的东西。这是一个以.js
结尾的JavaScript文件。
我知道我可以使用:
(setq-default tab-width int)
在我的.emacs
文件中,但我只是调用 M-x command
来设置它并在我处理此文件期间忘记它。我尝试了 M-x apropos
和Google,但找不到具体的命令。
感谢。
答案 0 :(得分:25)
您可以使用以下内容将变量js-indent-level
置于缓冲区本地:
M-x make-variable-buffer-local <RET> js-indent-level <RET>
然后您可以使用以下方法在缓冲区中设置该变量:
M-x set-variable <RET> js-indent-level <RET> 2
答案 1 :(得分:13)
您还可以使用文件局部变量为该文件自动化omrib的解决方案,方法是将其添加到其中:
// Local Variables:
// js-indent-level: 2
// indent-tabs-mode: nil
// End:
答案 2 :(得分:7)
对单一缓冲区执行此操作的最简单方法是使用M-x set-variable
。
M-x set-variable
并按Enter tab-width
,然后按enter Set tab-width (buffer-local) to value:
行。
输入您想要的值,然后按Enter键应立即使用新值更新缓冲区。
答案 3 :(得分:6)
在项目目录中创建一个“.dir-locals.el”文件并填写如下:
((nil . ((tab-width . 2))))
这将自动设置标签宽度,您不必修改实际文件(可能是版本控制的。)
有关格式的详细信息,请参阅the manual。我相信这需要Emacs 23。
答案 4 :(得分:1)
正如其他人所指出的,File Local Variables approach的一个问题是您需要修改文件,如果您需要将这些声明保留在版本控制范围之外,那么这并不理想。
如果您希望变量应用于给定目录下的所有文件,那么目录本地变量显然是可行的方法,您可以使用.dir-locals.el
文件实现该目标,或致电(dir-locals-set-directory-class)
:
我更喜欢自己的目录类方法,而且我认为文件局部变量没有类似的方法很遗憾,但我发现目录类代码实际上与文件完美配合,唯一的问题是dir-locals-set-directory-class
在其参数上调用file-name-as-directory
,由于尾部斜杠,它会阻止它匹配。
以下是一种为单个文件配置目录本地变量的方法,无需修改文件本身或影响同一父目录下的其他文件。
(defun my-file-locals-set-directory-class (file class &optional mtime)
"Enable 'directory local' classes for individual files,
by allowing non-directories in `dir-locals-directory-cache'.
Adapted from `dir-locals-set-directory-class'."
(setq file (expand-file-name file))
(unless (assq class dir-locals-class-alist)
(error "No such class `%s'" (symbol-name class)))
(push (list file class mtime) dir-locals-directory-cache))
(dir-locals-set-class-variables
'my-javascript-class
'((nil . ((js-indent-level . 2)
(indent-tabs-mode . nil)))))
(my-file-locals-set-directory-class
"path/to/the/file.js" 'my-javascript-class)
答案 5 :(得分:0)
我在我的init.el
中使用一段代码尝试自动检测使用2空格缩进的文件,并在看到此类文件时将该文件的Emacs缩进切换为2个空格:
(add-hook 'js-mode-hook
(lambda ()
(when (string-match-p "^ [A-Za-z]" (buffer-string))
(make-variable-buffer-local 'js-indent-level)
(set-variable 'js-indent-level 2))))