Emacs:当光标位于右括号上时匹配括号

Emacs:当光标位于右括号上时匹配括号,emacs,elisp,Emacs,Elisp,{以前有人问过:但没有一个答案是令人满意的} 我正在使用带有以下.emacs设置的mic paren(尽管所有类似的emacs软件包都存在问题,所以这似乎是某种默认的emacs行为) 突出显示两个括号之间的所有文本。当光标位于左括号上时效果很好,但从另一边看,我必须将光标放在右括号之后。当与slime一起使用时,这会导致奇怪的行为(需要将光标放在右括号上以显示一般用法信息等)。当光标位于右括号上时,是否有任何方法可以更改此行为并使emacs与括号匹配 编辑:次要语法修复不知道麦克风参数,但使用内

{以前有人问过:但没有一个答案是令人满意的}

我正在使用带有以下.emacs设置的mic paren(尽管所有类似的emacs软件包都存在问题,所以这似乎是某种默认的emacs行为)

突出显示两个括号之间的所有文本。当光标位于左括号上时效果很好,但从另一边看,我必须将光标放在右括号之后。当与slime一起使用时,这会导致奇怪的行为(需要将光标放在右括号上以显示一般用法信息等)。当光标位于右括号上时,是否有任何方法可以更改此行为并使emacs与括号匹配


编辑:次要语法修复

不知道麦克风参数,但使用内置的
显示参数模式
,您可以在Emacs-24.4中获得所需的:

(defun my-show-paren-any (orig-fun)
  (or (funcall orig-fun)
      (if (looking-at "\\s)")
          (save-excursion (forward-char 1) (funcall orig-fun)))))

(add-function :around show-paren-data-function #'my-show-paren-any)

不知道话筒参数,但使用内置的
显示参数模式
,您可以在Emacs-24.4中获得所需的:

(defun my-show-paren-any (orig-fun)
  (or (funcall orig-fun)
      (if (looking-at "\\s)")
          (save-excursion (forward-char 1) (funcall orig-fun)))))

(add-function :around show-paren-data-function #'my-show-paren-any)

下面是“麦克·帕伦”的作品。但是,它有一些余辉;-)。如果光标位于结束分隔符上或其正后方,则会亮显开始分隔符

(去噪麦克风阵列高亮显示(环绕光标关闭激活)
“在光标下方关闭delim以突出显示sexps的肮脏攻击”
(如果(等式(字符语法(以下字符))?\)
(让((排列优先级“关闭”)
(省去远足
(向前字符)
广告(做这件事)
广告(做这件事)
当然,要做到这一点,您需要正确安装
mic paren
。只需按照此处引用的
mic paren.el
中的安装指南操作即可:

安装:

  • 将此文件放在“加载路径和字节编译”中的目录中 信息技术你当然可以忽略这些警告
  • 将以下内容放入.emacs文件中: (GNU Emacs仅支持窗口系统中的麦克风阵列,但不支持XEmacs 支持麦克风阵列(也不支持X)
(当(或(featurep'xemacs)窗口系统)
(需要“麦克风参数”);加载
(paren激活);激活
;在此处设置mic paren的任何可自定义变量:
; ...
)
  • 重新启动Emacs。麦克风阵列现在已安装并激活
  • 要列出可能的自定义设置,请输入
    C-h f paren activate'或
    转到自定义组
    mic paren matching'
编辑:

  • 遵循Stefan关于
    (featurep'xemacs)

    • 以下是“麦克·帕伦”的作品。但是,它有一些余辉;-)。如果光标位于结束分隔符上或其正后方,则会亮显开始分隔符

      (去噪麦克风阵列高亮显示(环绕光标关闭激活)
      “在光标下方关闭delim以突出显示sexps的肮脏攻击”
      (如果(等式(字符语法(以下字符))?\)
      (让((排列优先级“关闭”)
      (省去远足
      (向前字符)
      广告(做这件事)
      广告(做这件事)
      
      当然,要做到这一点,您需要正确安装
      mic paren
      。只需按照此处引用的
      mic paren.el
      中的安装指南操作即可:

      安装:

      • 将此文件放在“加载路径和字节编译”中的目录中 信息技术你当然可以忽略这些警告
      • 将以下内容放入.emacs文件中: (GNU Emacs仅支持窗口系统中的麦克风阵列,但不支持XEmacs 支持麦克风阵列(也不支持X)
      (当(或(featurep'xemacs)窗口系统)
      (需要“麦克风参数”);加载
      (paren激活);激活
      ;在此处设置mic paren的任何可自定义变量:
      ; ...
      )
      
      • 重新启动Emacs。麦克风阵列现在已安装并激活
      • 要列出可能的自定义设置,请输入
        C-h f paren activate'或
        转到自定义组
        mic paren matching'
      编辑:

      • 遵循Stefan关于
        (featurep'xemacs)

      这里需要记住的是,Emacs的点在两个字符之间,而不是在一个字符上。对于要触发的
      show paren
      功能,该点必须位于paren的正外部,无论是打开还是关闭。观察到的不对称是由块光标任意放置在点之后(而不是之前)的字符上引起的

      如果这使您感到不安,那么解决方法是使用直线光标而不是块光标


      show paren mode
      在下一个版本中得到了增强,这样它也会在paren内部立即触发。

      这里需要记住的是,Emacs的点在两个字符之间,而不是在一个字符上。对于要触发的
      show paren
      功能,该点必须位于paren的正外部,无论是打开还是关闭。观察到的不对称是由块光标任意放置在点之后(而不是之前)的字符上引起的

      如果这使您感到不安,那么解决方法是使用直线光标而不是块光标


      show paren mode
      在下一个版本中得到了增强,这样它也会在paren内部立即触发。

      以下建议满足您的要求。当块光标“位于”左括号上时,右括号高亮显示。当块光标“位于”右括号上时,右括号亮显

      (建议添加显示参数数据功能
      :大约
      (兰姆达(原乐趣)
      (cond((看着“\\s(”)
      (所有功能都是为了好玩)
      ((查看“\\s”)
      (保存短途旅行(前进角色1)(funcall orig fun‘‘‘‘‘‘)’)
      
      请参阅我在Emacs Stack Exchange站点上的回答:。在这个答案中,我提供了上述代码的完整解释