不好意思再问一下,我把python mode的放到我的Private snippet文件夹下的确生效了可是java mode却没有入法炮制成功,可是菜单栏的yasnipper里却明明显示有的,我看到python mode下面除了snipper意外还有很多其他的文件,不知有没有关系…
这是我原搬山人的配置。
这里定义了下snippet路径。
(defun ztlevi/load-yasnippet ()
(interactive)
(unless yas-global-mode
(progn
(yas-global-mode 1)
(setq my-snippet-dir (expand-file-name "~/.spacemacs.d/snippets"))
(setq yas-snippet-dirs my-snippet-dir)
(yas-load-directory my-snippet-dir)
(setq yas-wrap-around-region t)))
(yas-minor-mode 1))
这段有个remove-hook和add-to-hooks的过程,如果你不是自己定义layer的话,只要把progn里面的内容放到dotspacemacs/user-config
里面就行了
(defun ztlevi-programming/post-init-yasnippet ()
(progn
;; remove yas-installed-snippets-dir from yas-snippet-dirs
(with-eval-after-load 'yasnippet
(setq yas-snippet-dirs (remq 'yas-installed-snippets-dir yas-snippet-dirs)))
(set-face-background 'secondary-selection "gray")
(setq-default yas-prompt-functions '(yas-ido-prompt yas-dropdown-prompt))
(mapc #'(lambda (hook) (remove-hook hook 'spacemacs/load-yasnippet)) '(prog-mode-hook
org-mode-hook
markdown-mode-hook))
(spacemacs/add-to-hooks 'ztlevi/load-yasnippet '(prog-mode-hook
markdown-mode-hook
org-mode-hook))
))
.yas_parents
就是指定parent mode,它下面的所有snippet都会继承,.yas_setup.el
就是针对各个mode进行一些修改,我也是从yasnippet github repo那里直接拿过来的,具体没看过。应该不是这里的问题。
哼没起作用… 我有空好好研究u研究 暂时先用visual studio code编java吧,顺便也看到了你的vsc leader key设置,照抄下哈哈哈~
主要就是yas-snippet-dirs
,默认有("~/.emacs.d/snippets" yas-installed-snippets-dir)
,spacemacs会自动加上~/.spacemacs.d/snippets
想问下你的emacs里java会出现自动补全吗,感觉没人在emacs里用java 我的python是没有问题的但是java就不行,我在google上看了一会好像不少人有这个问题但是也没有人解决
有点崩溃,不知道怎么回事我瞎弄了一些东西自己好了,得,就这样了…
Spacemacs 的 Java 補全似乎要用 Eclipses 當後端。
比较好奇楼主为什么会从号称宇宙最强 IDE 的 VS Code 跳到 spacemacs
我从全宇宙次强的IDE jb家跳到spacemacs,原因有:
- vim插件有差距,随便找一条vim技巧来尝试,ideaVim有50%可能不能用,evil只有10%
- jb虽好,不能让我在
foo(❚)
时按下我自己绑定的C-;
使代码变成foo(❚);
然后继续在括号内编辑。
哈哈没有呀两个都用,宇宙最强的编辑器也太多了,用spacemacs是特别喜欢他的leader key还有各种各tweak,大神也多不像vscode很多都是半知半解copy设置的,上端社区质量没emacs高哈哈哈~但是各有各的好吧,我觉比较很无聊,学习~
还有我是搞自然语言处理的,感觉用emacs处理text应该也挺给力的
这个我看过但是暂时还是很少人用.话说你那个在括号里control ; 的代码能让我学习下不呵呵~
(defun insert-semi-at-eol ()
"Insert semicolon at end of line."
(interactive)
(save-excursion
(end-of-line)
(insert ";")
)
)
(define-key evil-insert-state-map (kbd "C-;") 'insert-semi-at-eol)
内置save-excursion
保存光标位置,秒速实现黑魔法
看了两位的留言,感觉 VS Code 作为 IDE 可能是宇宙最强,但是作为编辑器来讲, emacs 第二没人敢当第一啊,
java还是ide或者vs code走起吧。。。目前没啥完美的解决方案
这个确实是,ideavim visual selection还跟某些功能冲突,比方说extend region使用的还是原来的选择模式,而不是ideavim的,就无法删除。
嘿嘿我把他改为全局Key了顺便加了个在结尾加了个(newline),多谢多谢! 第一天入坑的我还是挺高兴的。
改进版,判断行尾字符决定是 insert 还是 remove,支持多行:
(defun insert-or-remove-trailing-char (&optional ch)
(interactive)
(let ((ch (or ch (read-char "Input char: ")))
(fn (lambda (ch)
(end-of-line)
(if (eq (char-before) ch)
(delete-backward-char 1)
(insert-char ch)))))
(save-excursion
(if (region-active-p)
(save-restriction
(narrow-to-region (region-beginning) (region-end))
(deactivate-mark)
(goto-char (point-min))
(funcall fn ch)
(while (< (point) (- (point-max) 1))
(next-line)
(funcall fn ch)))
(funcall fn ch)))))
(defun insert-or-remove-trailing-semi ()
(interactive)
(insert-or-remove-trailing-char ?\;))
(defun insert-or-remove-trailing-comma ()
(interactive)
(insert-or-remove-trailing-char ?,))
再分享一个:
(defun ins-c++-curly ()
"Insert {}.
Threat is as function body when from endline before )"
(interactive)
(if (looking-back "\\()\\|try\\|else\\|const\\|:\\)$")
(progn
(insert " {\n\n}")
(indent-according-to-mode)
(forward-line -1)
(indent-according-to-mode))
(insert "{}")
(backward-char)))
(add-hook 'c-mode-common-hook 'my-c-common-hook)
(defun my-c-common-hook ()
(define-key c-mode-base-map "{" 'ins-c++-curly))
这是我刚入坑的时候急切寻找的另一个function,输入大括号并换行并把光标放在中间(我绑了个<C-return>
然后把if
去掉了)。来源在这里:cc mode - New line and autoindent braces in ccmode in Emacs - Stack Overflow
题外话:
逗号的话,因为在行尾输入之后没有要跑回前面括号里这样的问题,我竟然一直没想到它可以和分号一样简化一下 这次抛砖引玉我给自己打9.9分
编辑 json 或数组之类的数据就要用到逗号了。