怎么在C++-mode下输入英文符号“,”,我这边一直提示“Wrong type argument:: stringp,nil”

image

呃…发一下你的 emacs 版本、配置文件、c+±mode 启动方式。给出的信息太少,大家也没法帮你研究呀

Emacs的版本是29.4,使用的环境是windows10,在UI版本上可以输入“,”,出问题的是用的终端tabby远程连接的ubuntu系统,在终端上使用的emacs时无法输入“,”,相关的配置:

;;;; CC-mode配置  http://cc-mode.sourceforge.net/
(require 'cc-mode)

(c-set-offset 'inline-open 0)
(c-set-offset 'friend '-)
(c-set-offset 'substatement-open 0)


;;;;我的C/C++语言编辑策略

(defun my-c-mode-common-hook()
  (setq tab-width 4 indent-tabs-mode nil)
  ;;; hungry-delete and auto-newline
  (c-toggle-auto-hungry-state 1)
  ;;按键定义
  (define-key c-mode-base-map [(return)] 'newline-and-indent)
  (define-key c-mode-base-map [(f7)] 'compile)
;;  (define-key c-mode-base-map [(tab)] 'hippie-expand)
  (define-key c-mode-base-map [(tab)] 'my-indent-or-complete)


;;预处理设置
  (setq c-macro-shrink-window-flag t)
  (setq c-macro-preprocessor "cpp")
  (setq c-macro-cppflags " ")
  (setq c-macro-prompt-flag t)
  (setq hs-minor-mode t)
  (setq abbrev-mode t)
)
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

;;;;我的C++语言编辑策略
(defun my-c++-mode-hook()
  (setq tab-width 4 indent-tabs-mode nil)
  (c-set-style "stroustrup")
;;  (define-key c++-mode-map [f3] 'replace-regexp)
)

(setq-default c-electric-flag nil)
;; auto close bracket insertion. New in emacs 24
;;(electric-pair-mode 1)
;; make electric-pair-mode work on more brackets
;;(setq electric-pair-pairs '(
;;                            (?\" . ?\")	;
;;                            (?\{ . ?\})	
 ;;                          ) )

(provide 'init-cppmode)

你打开 toggle-debug-on-error 看看报错stack呗,一般都能找到原因

打开之后报错如下:

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  looking-at(nil)
  c-semi-pp-to-literal(953)
  c-in-literal(726)
  c-electric-semi&comma(nil)
  funcall-interactively(c-electric-semi&comma nil)
  call-interactively(c-electric-semi&comma nil nil)
  command-execute(c-electric-semi&comma)

那可能就是c-semi-pp-to-literal这个函数的问题,你edebug-defun一下它看看为啥给looking-at传个nil参数呗