我知道如何fzf.vim,但我想从终端打开。阅读历史或阅读信息可能是实现这一目标的途径,但我想知道是否有什么聪明的方法。
k4ymrczo1#
以下是将最近使用的文件列表从vim保存到文件的方法:
vim
vim -c "call append(0, v:oldfiles)" -c "write vim-oldfiles.tmp" -c exit
将v:oldfiles(保存在~/.viminfo中的最近文件列表)放入第一个(新的且开始时为空)缓冲区,将缓冲区写入文件,退出。现在您可以将文件的内容传递给fzf。
v:oldfiles
~/.viminfo
fzf
7vux5j2d2#
不是精确的解决方案。但是你可以像IDE一样在你的vim编辑的下半部分打开一个终端缓冲区,然后使用你的终端fzf但是,不确定这是否允许您在新的vim选项卡中打开文件
w7t8yxp53#
我有一个名为old的zsh自动加载函数:
function old(){ vim -c 'redir >> /tmp/oldfiles.txt | silent oldfiles | redir end | q' sed -i '/NvimTree$/d' /tmp/oldfiles.txt local fname fname=$(awk '/home/ && !/man:/ {print $2}' /tmp/oldfiles.txt | fzf) || return vim "$fname" \rm /tmp/oldfiles.txt }
agxfikkp4#
如果在路径中包含~的文件上执行vim时遇到问题(vim打开一个新的空白文件,而不是所需的文件),因为fzf和vim不扩展波浪号(~),下面是我的处理方法:
~
export FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS" --bind 'ctrl-e:execute(vim -c \"execute \\\"edit\\\" expand({})\" >/dev/tty)' "
这是基于this的反复试验。
bvk5enib5#
结合其他一些答案,这里有一个不需要临时文件并写入stdout的版本(这样您就可以将其传输到另一个命令中,或者使用$(...)捕获输出)。
$(...)
vim -e -c "redir >> /dev/fd/100 | for f in v:oldfiles | silent echo substitute(f, \"^\\\\~\", \$HOME, \"g\") | endfor | redir end | q" 100>&1 &>/dev/null
此解决方案结合了其他解决方案中的元素,但进行了一些改进:
100>&1
/dev/fd/100
/dev/fd/1
redir end
/dev/null
vim -e
oldfiles
append
write
5条答案
按热度按时间k4ymrczo1#
以下是将最近使用的文件列表从
vim
保存到文件的方法:将
v:oldfiles
(保存在~/.viminfo
中的最近文件列表)放入第一个(新的且开始时为空)缓冲区,将缓冲区写入文件,退出。现在您可以将文件的内容传递给
fzf
。7vux5j2d2#
不是精确的解决方案。但是你可以像IDE一样在你的vim编辑的下半部分打开一个终端缓冲区,然后使用你的终端fzf
但是,不确定这是否允许您在新的vim选项卡中打开文件
w7t8yxp53#
我有一个名为old的zsh自动加载函数:
agxfikkp4#
如果在路径中包含
~
的文件上执行vim时遇到问题(vim打开一个新的空白文件,而不是所需的文件),因为fzf和vim不扩展波浪号(~
),下面是我的处理方法:这是基于this的反复试验。
bvk5enib5#
结合其他一些答案,这里有一个不需要临时文件并写入stdout的版本(这样您就可以将其传输到另一个命令中,或者使用
$(...)
捕获输出)。此解决方案结合了其他解决方案中的元素,但进行了一些改进:
100>&1
),然后使用/dev/fd/100
强制写入输出。这确保了vim实际上写入stdout而不是终端。注意,这也可以使用/dev/fd/1
来实现(但只有当出于某种原因省略了redir end
时),但这样我们就不能应用下一点了。/dev/null
,以防止vim在启动时将一些终端转义码写入stdout,因此使用不同的fd可以确保干净的输出。vim -e
)下使用Vim来抑制“Vim:警告:输出未到终端”输出和伴随的延迟。[source]v:oldfiles
,只输出文件名(https://stackoverflow.com/a/70749181/740048使用的oldfiles
命令添加行号)。append
/write
组合,它与/dev/fd/100
技巧配合使用,但最后将/dev/fd/100
放在了旧文件列表中,因此我没有使用这种方法。