这个功能子龙貌似提过一下, 但是好像没弄这个, 我想如果创建个html文件的话, 自动就把 html和body 等标签自己写好, 代码块也能做到这点, 但是还得自己输入一下. 挺麻烦的.
用 auto-insert
,以前讨论过 'auto-insert' 的搜索结果 - Emacs China
我更倾向使用 yasnippet
,虽然多打几个字,但是更灵活。虽然 auto-insert
能根据后缀自动创建,但是这个过程你不能选择,只能添加固定的内容。而 snippet 可以定义一组不同的片段,比如 html1,html2,html3,按需添加。
个人感觉yasnippet更适合平常用,而auto-insert适合大量创建文件头一模一样的文件的时候。
比如强迫症的Emacs配置……文件头总会有一模一样的版权声明
yasnippet
是好用, 但是 html
的 web-mode
里面不管你输入什么自动补全都是个标签.
每次都要先打出 html
然后在后面 M-m x
, 再输入 yas-expand
, 再选择补全…
这个就有点麻烦, 别的语言倒没这问题
你的配置有问题吧,TAB 键被 emmet 占用了?
我靠! 大哥你不说我没看过, 原来一直都是 emmet-expand
…
正常应该是绑定的哪个函数?
不过绑定这个函数除了 web-mode
的时候都挺好的…
emmet 专门补全 html/css 标签,yasnippet 范围更广,但是这两个 package 并不重叠,所以在 web-mode 里需要合理安排。
yasnippet 只有一个方法法,把它绑定 TAB,emmet 有一系列方法,绑定到 [prefix] e 底下。
我知道问题了, 但是没有好的解决办法.
我用的是 hybrid
模式, 我之前就在全局设置过 TAB
键绑定 yas-expand
了.
当编辑 html
文件的时候, 如果我是这种命令模式的时候, TAB
键绑定的就是 yas-expand
, 可是命令模式的时候光标是在最后一个字母上的, 比如我设置的补全的快捷键是 ab
, 那么我得输入, ab
字母的后面必须有一个空格~ 然后 esc
TAB
, 就补全了, 多余的那个空格我可以用自动对齐的快捷键干掉它, 但是这种方式很不优雅~
如果关闭了 emmet-mode
这方面是没问题了, 但是写标签就没补全了… 有点尴尬. 好像也没什么好的解决办法吧
空格?没看懂
没看懂,我是web-mode里yas+company和其他地方一样用tab,emmet-expand
另外绑一个键,用着挺好的。
恰好我前两天刚学习并配置了这个功能。使用yasnippet + auto-insert,自动添加的内容既可以固定,又可以像yas一样设置片段。
配置在https://github.com/hexingb/emacs-c-ide-demo/blob/dev/custom/setup-programming.el 46-67行。
我是从http://howardism.org/Technical/Emacs/templates-tutorial.html学习到的。
主要是我补全就习惯用 tab
…
就这么滴吧…
通常按 tab
补全的时候, 我们都是在 insert
模式下, 但是在 web-mode
下稍微不一样
web-mode
的时候 insert
模式下的 tab
绑定的 emmet-mode
的函数
web-mode
的时候命令模式下 tab
还是绑定的 yas-expand
兄弟, 顺便问下你吧 emmet-expand
绑定的什么键… 我看那个都觉得不合适…
我跟他教程走了一下, 不知道咋回事自动补充的内容总是出现两份…
这随便啊,我用的是[insert-mode]C-l
。
tab可以几个功能合起来,比如我现在tab打开company列表,如果已经开了就选择当前项补全,如果company没有候选项就用hippie-expand
。
但是emmet-expand-yas
不应该放进tab,比如你当前光标是a|
,然后同一个buffer里有个单词ass
,此时你可以把它补全为ass
,也可以用emmet展开为<a href="|"></a>
,这两个动作如果绑一个键,按下去的时候是不可能让电脑帮你判断你想干什么的,不像前面的company和hippie-expand
可以一个作为另一个的fallback。
我知道这个问题, tab
绑定 emmet-expand
就是有这个问题, 不过我后来想也无所谓了…
因为在 html
文件的时候我也不会有什么别的代码块. 我的 web-mode
下就一个代码块~
为了这一个改键不划算了…
emmet 可不只是 emmet-expand
,还有其它实用的方法,再加上 web-mode 也有些针对 html 元素的方法。我把它们都放在 <prefix> e
分组底下(e 表示 element, f 表示 file,b 表示 buffer,…),方便记忆:
ee 双连击,最常用的绑定 emmet-expand (类似的 ff 绑定 find-file, bb 绑定 switch-to-buffer ...)
ef 下一个元素
eb 上一个元素
en 下一个编辑点
ep 上一个编辑点
ev 消除包裹元素
ew 添加包裹元素
ek 删除元素以及子元素
er 元素更名
...
我想设置在 web-mode
的时候 yas-expand
的快捷键为 C-i
, 是我姿势不对么, 写出来没效果, 目前我发现 web-mode
的时候 tab
键和 C-i
竟然都绑定的 emmet-expand
.
(defun my-web-mode-expand ()
(global-set-key (kbd "C-i") 'yas-expand)
(add-hook 'web-mode-hook 'my-web-mode-expand)
代码写在了 package.el
.