我正在尝试编写一些Emacs函数,以便能够简单地使用Spacemacs的Java层编译和调试Java类(不想进入像jdee这样的复杂包)。编译函数被定义为beblow,并按预期工作。
(defun my-java-compile (command)
(interactive (list (read-string
"Command: "
(concat
"javac"
" -d "
java-dest-path
" -cp "
java-class-path
" "
(file-name-nondirectory buffer-file-name)))))
(unless (file-exists-p java-dest-path)
(make-directory java-dest-path))
(compilation-start command nil)
)java-dest-path和java-class-path是在项目根目录中的.dir-locals.el中设置的局部变量。
调试函数定义为:
;; get fully qualified class name
(defun get-fqcn ()
(setq get-package-name-command
(concat
"gsed -n 's/^package\s\+\([^;\s]\+\);\s*$/\1/p' "
buffer-file-name))
(setq fqpn (shell-command-to-string get-package-name-command))
(if (equal "" fqpn) (file-name-base buffer-file-name)
(concat fqpn "." (file-name-base buffer-file-name)))
)
(defun my-jdb (command)
(interactive (list (read-string
"Command: "
(concat
"jdb"
" -classpath "
java-class-path
" "
(get-fqcn)))))
(helm-M-x nil jdb command)
) 我还在努力让它发挥作用。以下是两个问题:
shell-command-to-string函数时,gsed -n 's/^package\s\+\([^;\s]\+\);\s*$/\1/p' java_file命令返回一个空字符串"",而在终端中运行时返回完全限定的包名。如果我将其更改为gsed -n '/^package/p',emacs函数将返回包行OK。因此,shell-command-to-string似乎无法处理gsed中的正则表达式。附近有工作吗?gud或jdb的函数。gud与compilation-start函数的等价性是什么?发布于 2018-11-14 11:56:09
gsed的字符串中逐字显示:
"gsed -n的/^package\s\+(^;\s\+\);\s*$/\1/p‘“
或者,在Emacs Lisp中实现搜索:
(保存-偏移(goto-char (点-min))(搜索-前进-regexp“^包[:空白:]+\([^;:空白:]+\);”)(匹配字符串1)jdb:
(jdb命令)https://stackoverflow.com/questions/53290968
复制相似问题