小编Ste*_*fan的帖子

将lambda绑定到键时出现"错误的类型参数:commandp"错误

我在这里得到一个"错误的类型参数:commandp,(lambda nil(forward-line 5))".

(global-set-key [?\M-n] (lambda () (forward-line 5)))
Run Code Online (Sandbox Code Playgroud)

错误是什么?我很确定这很简单,我错过了一些明显的东西.

emacs elisp

78
推荐指数
2
解决办法
2万
查看次数

Elisp列表包含值

在elisp中,如何检查列表是否包含值?所以以下将返回t:

(contains 3 '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

(contains 5 '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

将返回零.

emacs elisp

38
推荐指数
2
解决办法
9124
查看次数

如何让Emacs自动缩进我的C代码?

我刚刚开始感受到emacs,但是当我按下返回键时,我很沮丧.我知道如果我按下它会做它,但我不能养成这个习惯.我不能.我需要回击,我讨厌每次重新标记.

我进入选项并发现C模式钩子和C++模式钩子等 - 他们定义了两个键映射(10和13,我记得0A和0D是CR/LF,因为我在组装中经常使用它们) - - 我想,因为一个说" (lambda nil (define-key lisp-mode-map [13] (quote newline-and-indent))"和另一个相同,但(quote newline)相反,我只是把 - 并 - 缩进在它的末尾,并认为它会工作.

但事实并非如此:我设置并保存它,尝试过但无济于事.重启emacs,仍然没有成功.如何缩进我的代码呢?非常疯狂的是,emacs需要一个lisp学位才能根据你的基本需求进行配置.

另外,作为一个侧面问题:如何从剪贴板复制和粘贴Killing/yanking很方便,除了我讨厌每次我想粘贴到其他地方时都要编辑 - >复制.

- 编辑 -

好吧,我把以下几行放到我的.emacs中并且它有效:

(add-hook 'c-mode-common-hook (lambda ()
      (local-set-key (kbd "RET") 'newline-and-indent)))

谢谢您的帮助

emacs

22
推荐指数
4
解决办法
2万
查看次数

基于扩展的Emacs自动次要模式

我在这个主题上发现了这个问题,但是有没有办法[在emacs中]基于扩展设置次要模式(或其列表)?例如,很容易发现可以像这样操纵主要模式

(add-to-list 'auto-mode-alist '("\\.notes\\'" . text-mode))
Run Code Online (Sandbox Code Playgroud)

而我理想的是能够做到的是

(add-to-list 'auto-minor-mode-alist '("\\.notes\\'" . auto-fill-mode))
Run Code Online (Sandbox Code Playgroud)

联系问题的接受答案提到钩子,特别是temp-buffer-setup-hook.要使用它,你必须像这样向钩子添加一个函数

(add-hook 'temp-buffer-setup-hook #'my-func-to-set-minor-mode)
Run Code Online (Sandbox Code Playgroud)

我的问题是双重的:

  1. 是否有更简单的方法来执行此操作,类似于主要模式?
  2. 如果没有,如何为钩子编写函数?
    1. 它需要根据正则表达式检查文件路径.
    2. 如果匹配,则激活所需模式(例如auto-fill-mode).

微弱的和错误的尝试解决方案:

;; Enables the given minor mode for the current buffer it it matches regex
;; my-pair is a cons cell (regular-expression . minor-mode)
(defun enable-minor-mode (my-pair)
  (if buffer-file-name ; If we are visiting a file,
      ;; and the filename matches our regular expression,
      (if (string-match (car my-pair) buffer-file-name) …
Run Code Online (Sandbox Code Playgroud)

emacs elisp dot-emacs

15
推荐指数
2
解决办法
2494
查看次数

Emacs 24.3 python:使用默认值4无法猜测python-indent-offset

任何了解Lisp的人都可以帮忙解决这个警告吗?

我升级到Emacs 24.3,每当我使用Emacs创建Python文件时,我都会收到此警告消息.搜索python.el并找到产生警告的以下代码部分:

(let ((indentation (when block-end
                     (goto-char block-end)
                     (python-util-forward-comment)
                     (current-indentation))))
  (if indentation
      (set (make-local-variable 'python-indent-offset) indentation)
    (message "Can't guess python-indent-offset, using defaults: %s"
             python-indent-offset)))
Run Code Online (Sandbox Code Playgroud)

这是我的.emacs设置:

(setq-default c-basic-offset   4
              tab-width        4
              indent-tabs-mode nil)

(add-hook 'c-mode-common-hook
          (lambda ()
            (c-set-offset 'arglist-intro '+)
            (c-set-offset 'arglist-close 0)))

(add-hook 'python-mode-hook
          (lambda ()
            (c-set-offset 'arglist-intro '+)
            (c-set-offset 'arglist-close 0)))
Run Code Online (Sandbox Code Playgroud)

python emacs elisp indentation python-2.7

15
推荐指数
2
解决办法
1万
查看次数

通过SSH使用Emacs时,"yank"不会粘贴文本

当我尝试通过ssh在远程服务器上运行Emacs时,C-y(偶数M-x yank)无法工作.每次我按C-y,都会说"Mark set",但没有其他事情发生.我在Linux下工作,远程服务器是Mac专业版.

现在我只能将文件下载到我的电脑上.关于如何更好地解决这个问题的任何想法?

emacs ssh yank

10
推荐指数
1
解决办法
1573
查看次数

自定义Elisp plist缩进

我不喜欢Elisp中的plists是如何缩进的.

;; current   desired   Python (for comparison)
;; '(a 1     '(a 1     {'a': 1,
;;     b 2     b 2      'b': 2,
;;     c 3)    c 3)     'c': 3}
Run Code Online (Sandbox Code Playgroud)

试过M-x emacs-version24.3.1,跑了emacs -Q,输入了plist并按下了C-x h C-M-\.

当它不是列表时,这个缩进是有意义的:

(mapcar (lambda (x) (x + 1))
        '(1 2 3 4))
Run Code Online (Sandbox Code Playgroud)

如何更改格式设置,以便只有plists(或者,如果不可能,所有引用列表)具有所需的矩形缩进,但其他所有内容的缩进保持不变?我需要将其存储在本地.el文件中,这样当我编辑此文件时,它会根据需要缩进,但此行为不会在其他任何地方结束.

emacs elisp indentation property-list

9
推荐指数
2
解决办法
560
查看次数

终端内的Emacs动态更改光标颜色

我正在尝试动态地将Emacs中的光标颜色更改为另一种颜色.

我正在使用emacs -nw终端Emacs.我正在使用的终端是Rxvt-Unicode(Urxvt).

由于Emacs不能(我认为)对终端进行更改,(set-cursor-color "red")将无法正常工作.为了改变终端的光标颜色,我可以运行 echo -ne '\033]12;red\007'.这会将光标的颜色更改为红色.

我在Emacs中尝试做的是在其中运行此命令. M-x shell-command RET echo -ne '\033]12;red\007' RET

但是,Emacs将转义回显的字符串并将其打印在窗口的底部,而不是实际对光标进行任何更改.

我真的不知道我还能从这里做什么,我不想使用Emacs GUI.有没有人知道这方面的方法?我希望能够根据我当前的模式更改光标的颜色,这就是为什么它需要是动态的.如果有人有任何其他建议我会很高兴听到他们!

emacs terminal elisp

8
推荐指数
1
解决办法
1062
查看次数

如何在Emacs中定义整行注释语法?

我希望序列//在行的开头处开始注释.但在一行内它不应该开始任何评论.

// this is a comment
This is a URL: http://example.com
Run Code Online (Sandbox Code Playgroud)

可能吗?

emacs comments elisp

8
推荐指数
2
解决办法
865
查看次数

所有模式下的Viper模式

我正在从vi移动到emacs,并且使用viper和vimpulse,当我C-w C-w进入窗口并且无法使用相同的命令返回原始窗口时它会变得非常烦人,因为另一个缓冲区(可能是帮助缓冲区)不是在Viper模式下.我怎样才能解决这个问题?

我尝试将其他模式添加到viper配置中,并使用默认情况下使用挂钩启动viper模式:

(add-to-list viper-vi-state-mode-list 'help-mode)
(add-hook 'help-mode (lambda () (setq viper-mode t)))

但这些命令都没有奏效.实际上,第一个产生了以下错误:

Warning (initialization): An error occurred while loading `/home/konrad/.emacs.d/init.el':

Wrong type argument: symbolp, (fundamental-mode ...

除此之外C-w C-w,我也错过了无法使用hjkl进行导航.有没有办法重用viper设置的键绑定,而不是为每种模式重新绑定它们?

emacs vimpulse viper viper-mode

7
推荐指数
1
解决办法
2001
查看次数