从“查找”或“定位”打开结果的快速方法

joe*_*lom 2 bash find locate

当我运行find或 时locate,匹配的文件将填充标准输出,每行一个文件。下一步通常是我想打开这些文件之一。如果我不必输入整个文件路径,而只是可以以某种方式与搜索结果进行交互,这将更快、更有效。打开搜索结果中显示的文件的最快方法是什么?

类似于Open a result of `locate` with `vi` 中给出的解决方案,如何`locate` 多个文件并在 vim 中打开它们?, 以及 如何对“locate”命令的结果采取行动?需要输入一个相当长的第二个命令,这不像我想要的那么快。

相反,有没有办法,例如,自动将搜索结果中的每个文件分配给一个数字变量名称(s1 - sn),以便打开第一个结果我只需输入vi $s1?或者是使用fzf或fasd等模糊查找器来解决此问题的更好方法?

Sté*_*las 5

我已经有~/.screenrc一段时间了:

bind -c pasteline 1 eval copy 'stuff "-Y"' 'paste .'
bind -c pasteline 2 eval copy 'stuff "2-Y"' 'paste .'
bind -c pasteline 3 eval copy 'stuff "3-Y"' 'paste .'
bind -c pasteline 4 eval copy 'stuff "4-Y"' 'paste .'
bind -c pasteline 5 eval copy 'stuff "5-Y"' 'paste .'
bind -c pasteline 6 eval copy 'stuff "6-Y"' 'paste .'
bind -c pasteline 7 eval copy 'stuff "7-Y"' 'paste .'
bind -c pasteline 8 eval copy 'stuff "8-Y"' 'paste .'
bind -c pasteline 9 eval copy 'stuff "9-Y"' 'paste .'
bindkey ¬ command -c pasteline
Run Code Online (Sandbox Code Playgroud)

基本上,¬1从屏幕内输入,在光标上方插入第一行,¬2第二行等等。

在我的~/.Xdefaults,我也有:

XTerm.VT100.translations:             #override\
    Meta <KeyPress> /: dabbrev-expand()
Run Code Online (Sandbox Code Playgroud)

这让我们xterm完成(在Alt+/)屏幕上的内容(从光标位置向后看)。

使用zsh,在 内使用时screen,您可以执行以下操作:

copy-screen() {
  screen -X eval copy 'stuff "-$ H\r"' 'writebuf .lastoutput'
  killring=(${(Oaf)"$(<~/.lastoutput)"})
  CUTBUFFER=$killring[1]
  killring[1]=()
}
zle -N copy-screen
bindkey '\ec' copy-screen
Run Code Online (Sandbox Code Playgroud)

绑定Alt+C到该小部件,该小部件将光标上方的行存储到剪切缓冲区和终止环(您在模式中粘贴Ctrl+Y和循环的内容)。(以上假设是从您的主目录启动的)。Alt+Yemacsscreen

如果插入的文本需要引用(例如因为它包含空格或其他特殊的 shell 字符),您可以键入Alt+"forzsh来引用它。

例如,您刚刚运行:

$ find /usr/local -size +1M
/usr/local/lib/liblzma.a
/usr/local/share/doc/sudo/ChangeLog
/usr/local/share/perl/5.18.2/Unicode/Unihan/Definition.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/RSKangXi.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRG_TSource.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/HanYu.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/RSUnicode.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRG_GSource.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRGKangXi.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRGHanyuDaZidian.db    
Run Code Online (Sandbox Code Playgroud)

并且您想vim在上面的 sudo ChangeLog 上打开。使用第一种方法,您将键入:

vim ¬9
Run Code Online (Sandbox Code Playgroud)

使用第二种方法:

vim /我们Alt+/

并重复此操作,Alt+/直到您进入更改日志。

使用第三种方法:

vim Alt+CCtrl+YAlt+Y

并重复此操作,Alt+Y直到您进入更改日志。

最后一种方法可用于您的$s1查询。

不是存储在killring数组中,而是存储在数组中(如$s)并$s[1]用于第一行,$s[2]用于第二行......

copy-screen() {
  screen -X eval copy 'stuff "-$ H\r"' 'writebuf .lastoutput'
  s=(${(Oaf)"$(<~/.lastoutput)"})
}
zle -N copy-screen
bindkey '\ec' copy-screen
Run Code Online (Sandbox Code Playgroud)

该Alt+C存储的光标在上面的行s阵列。

无论如何,我们检索的是屏幕上显示的内容,这不一定与上一个命令输出的内容相同。例如printf 'a\bc \n'输出 5 个字节a,BS,,cSPC 和 LF,但只显示一个c.