我想在emacs-lisp中插入一个特定的yasnippet作为函数的一部分.有没有办法做到这一点?
唯一似乎相关的命令是yas/insert-snippet,但它只是打开一个包含所有选项的弹出窗口,并且文档没有说明通过指定代码段名称来绕过弹出窗口.
我安装了YASnippet并使用以下配置:
(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet-0.6.1c")
(require 'yasnippet) ;; not yasnippet-bundle
(yas--initialize)
(yas/load-directory "~/.emacs.d/packages/yasnippet-0.6.1c/snippets")
Run Code Online (Sandbox Code Playgroud)
但是,当我启动Emacs时它会给我一个错误:
Warning (initialization): An error occurred while loading `/home/alexander/.emacs':
Symbol's function definition is void: yas--initialize
To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file. Start Emacs with
the `--debug-init' option to view a complete error backtrace.
(add-to-list 'load-path "~/.emacs.d/plugins/yasnippet-0.6.1c")
(require 'yasnippet) ;; not yasnippet-bundle
(yas--initialize)
(yas/load-directory "~/.emacs.d/packages/yasnippet-0.6.1c/snippets")
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我试图找到答案,但没有成功.(我也尝试过另一个版本的yasnippet yasnippet-0.6.1b,但它是一样的.)
我想把它yasnippet作为后端auto-complete.但是,它不起作用.搜索互联网后我做的如下:获取auto-complete-yasnippet.el,在这里添加一些elisp .emacs:
(add-to-list 'load-path
"~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(yas-global-mode 1)
(yas-minor-mode nil)
(global-set-key (kbd "M-/") 'yas/expand)
;; Auto-complete settings
;; this is the code for the auto-complete
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d//ac-dict")
(ac-config-default)
;;setup for auto-complete-yasnippet
(require 'auto-complete-yasnippet)
(setq-default ac-sources
'(
;; ac-source-semantic
ac-source-yasnippet
ac-source-abbrev
ac-source-words-in-buffer
ac-source-words-in-all-buffer
;; ac-source-imenu
ac-source-files-in-current-dir
ac-source-filename
)
)
Run Code Online (Sandbox Code Playgroud)
我看看ac-sources*scratch*中的内容C-h v,它确实有ac-source-yasnippet.有人说,版本和升级可能有问题,auto-complete以及yasnippet.怎么修好?我的emacs版本是23.3.1我的auto-complete版本是1.3.1而我的yasnippet版本是0.8.0(beta),它刚刚从github …
我正在编写一个片段(用于 Go)并且希望在我移动到下一个字段时有条件地转换一个字段。具体来说,如果我保持未编辑状态,我希望该字段为空,如果我保持编辑状态,则将其括在括号中。
我不成功的片段,表达了我想要的但未能转换已编辑的字段:
func ${1:$$(when (and yas-modified-p yas-moving-away-p)
(concat "(" yas-text ")"))} FuncName
Run Code Online (Sandbox Code Playgroud)
我想要的是,t Type在该字段中键入时,代码段将扩展为:
func (t Type) FuncName
Run Code Online (Sandbox Code Playgroud)
当跳过未编辑的字段时,它会像这样展开:
func FuncName
Run Code Online (Sandbox Code Playgroud)
我知道条件按预期执行,因为如果我更改(concat ...)为(message "XXX"),我会看到打印在迷你缓冲区中的跟踪,但我不知道为什么我的转换不起作用。
最近才开始将 yasnippet 用于 emacs 并且非常喜欢它的工作方式,但是我遇到了一个小麻烦,如果可能的话,我需要一些帮助来解决。
我特别喜欢的一个片段是“for”片段,即:
# -*- mode: snippet -*-
# name: for
# key: for
# --
for (${1:i = 0}; ${2:i < N}; ${3:i++}) {
$0
}
Run Code Online (Sandbox Code Playgroud)
然而,我最近开始从事一个我们有不同编码风格的项目。只需将上面的代码片段更改为将起始大括号位置更改为:
# -*- mode: snippet -*-
# name: for
# key: for
# --
for (${1:i = 0}; ${2:i < N}; ${3:i++})
{
$0
}
Run Code Online (Sandbox Code Playgroud)
然而,我想轻松地在不同的项目之间切换,从而在不同的编码风格之间切换,而无需手动更改片段或创建许多重复项。所以我认为应该可以在代码片段中编写一些 elisp 代码来自动适应当前活动的编码风格。
环顾一些 Emacs/elisp 文档,我发现了所谓的 c-hanging-brace-alist ( GNU doc ),我觉得我应该能够以某种方式使用它。但是,我从未真正在 elisp 中进行过任何编程,而且我不确定如何实现这一点。任何帮助或建议将不胜感激!
我想让片段js-mode在web-mode.
中没有太多的片段web-mode。我应该怎么做才能在 .js 中使用 javascript 或 HTML 片段web-mode?
假设,我有以下 yasnippet:
my $dir = __FILE__;
$dir =~ s/(.*)\/.*/$1/;
Run Code Online (Sandbox Code Playgroud)
$1这是正则表达式第一次匹配。不是 yasnippet 特殊符号。我如何引用它,以便按原样插入到代码中?
我正在浏览Bottle教程,HTML的YAsnippet模式可以让我获得我在制作Bottle模板文件时常用的生产力奖励(.tpl).
有没有办法告诉YAsnippet html-mode在打开扩展名的文件类型时查看现有条目.tpl?
我正在使用 sql-interactive-mode 连接到 2 个数据库:MySQL 和 SQLite。我在yasnippets/sql-interactive-mode文件夹中为 mysql 创建了 yasnippets。例如,要在 MySQL 中添加一列,我使用以下代码片段:
# -*- mode: snippet -*-
# name: Add column
# key: addcol
# --
ALTER TABLE $1 ADD COLUMN \`$2\` $3;
Run Code Online (Sandbox Code Playgroud)
但 SQLite 使用不同的语法。如何为不同的数据库创建不同的 yasnippets?
我目前正在使用带有eglot(最小lsp 客户端)的Emacs。然而,当我一起使用片段库(例如,YASnippet、tempel)时,没有出现片段的补全。现在我可以指定代码片段名称并在代码中展开它。但我希望 emacs 的工作方式就像当我输入代码片段的名称时,它会显示代码片段的建议。
如果有一种方法可以在使用 eglot 时显示片段建议,我将不胜感激。我的 emacs 配置如下所示。
(use-package eglot
:ensure t
:config
(add-to-list 'eglot-server-programs '(c-mode . ("clangd")))
(add-to-list 'eglot-server-programs '(c++-mode . ("clangd")))
(add-to-list 'eglot-server-programs '(go-mode . ("gopls")))
(add-to-list 'eglot-server-programs '(rustic-mode . ("rust-analyzer")))
(add-to-list 'eglot-server-programs '(python-mode . ("pyls")))
(add-to-list 'eglot-server-programs '(LaTeX-mode . ("digestif")))
(add-hook 'c-mode-hook 'eglot-ensure)
(add-hook 'c++-mode-hook 'eglot-ensure)
(add-hook 'go-mode-hook 'eglot-ensure)
(add-hook 'rustic-mode-hook 'eglot-ensure)
(add-hook 'python-mode-hook 'eglot-ensure)
(add-hook 'LaTeX-mode-hook 'eglot-ensure)
;; format on save
(add-hook 'c-mode-hook '(lambda() (add-hook 'before-save-hook 'eglot-format-buffer nil t)))
(add-hook 'c++-mode-hook '(lambda() (add-hook 'before-save-hook …Run Code Online (Sandbox Code Playgroud)