定义快捷键调用函数传递参数?

这个是yafolding插件的一个函数,接受一个一个level参数。

怎么配置快捷键可以接受一个参数。

比如vim模式的2j,下移两行。

那么如果绑定C-c f或者evil模式下绑定<SPC f>,则C-c f 2, <SPC> f 2就是传递2作为参数Level.

interactive 可以控制要接受的参数的位置

(defun send-message-to-function (a)
  (interactive "p")
  (message (format "%s" a)))

这么写的话就可以通过C-u 12 函数的快捷键将数字12传递给函数了。如果是用helm调用的话要输入 M-x 函数名 C-u 数字 RET来调用

详细介绍的话这里有中文版:

摘录如下:

    若一个函数带了交互模式声明,则它也就是一个命令了,即可以通过M-x(execute-command)来调用了.

    交互模式声明的格式为(interactive code-string),其中:
       * 若interactive的参数以*开头,则意义是,如果当前buffer是只读的,则不执行该函数

       * interactive可以后接字符串,表示获得参数的方式
      * p 接收C-u的数字参数

           也可以不用P参数,直接在代码中判断current-prefix-arg的值
      * r region的开始/结束位置
      * n 提示用户输入数字参数,n后面可用接着提示符
      * s 提示用户输入字符串参数
      * 若函数接收多个input,需要用\n来分隔
1 个赞

顺带一提,evil里面在normal state输入数字就相当于C-u 数字。也就是说如果你把这个函数绑定一个快捷键,比如 (global-set-key (kbd "<f5>") 'send-message-to-function),输入数字 <f5>就可以把这串数字传递给函数了。和5j这样的按键顺序相同。

好的。非常感谢 :slight_smile: