ivy切换到selectrum的问题

C-x C-f

之前在ivy模式下,在minibuffer中按backspace键,会删除words(一级目录); (ivy-backward-delete-char)

现在在selectrum模式下,只会删除单个字符;使用C-M-backspace虽然会删除words(一级目录),但这样会把删除的字符串放到了剪切板上。想请问下有没有简单的方法能不将这里删除的数据放到剪切板上吗?

实际上可以自己写个函数,而且还可以解决 backspace 遇到目录有小数点之类的问题。

(defun selectrum-up-directory ()
  (interactive)
  (let ((directory (expand-file-name (minibuffer-contents-no-properties))))
    (delete-minibuffer-contents)
    (insert (string-trim-right directory "[^/]+/?"))))
;;; 或这样
(defun selectrum-up-directory ()
  "回到上层目录"
  (interactive)
  (let ((directory (minibuffer-contents-no-properties)))
    (delete-minibuffer-contents)
    (insert (string-trim-right (if (string= directory "~/") (expand-file-name "~/") directory) "[^/]+/?"))))
;;; 绑定一个自己喜欢的快捷键
(define-key minibuffer-local-map (kbd "C-l") #'selectrum-up-directory)
;;; PS: 我在 vertico 下试的可以用,不知道 selectrum 效果怎么样
1 个赞

好奇ivy可不可以只删除单个字符,有时候只想改一个字符但是ivy把整级目录全删了

可以达到效果

ivy的目录操作一直都很难受,删除单个字符可以这样

  (defun maple/ivy-backward-delete-char ()
    (interactive)
    (let ((dir ivy--directory)
          (p (and ivy--directory (= (minibuffer-prompt-end) (point)))))
      (ivy-backward-delete-char)
      (when p (insert (file-name-nondirectory (directory-file-name dir))))))
3 个赞

谢谢!我去试试

发现 vertico-directory 已经有现成的解决方案了,也没用到 vertico 的特性,可以拿过来直接用