shell 如何从FZF在特定应用程序中打开文件

1hdlvixo  于 2023-08-07  发布在  Shell
关注(0)|答案(4)|浏览(163)

我想使用FZF搜索文件,然后在我选择的编辑器中打开它们。太棒了Atom我不知道如何配置我的 shell ,我已经尝试了下面的,但我不能让它工作。
你能帮忙吗?
谢谢你,谢谢

fe() {
local files
  IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0))
  [[ -n "$files" ]] && ${EDITOR:-atom} "${files[@]}"
}

字符串

sulc1iza

sulc1iza1#

根据您的评论,唯一的问题可能来自此部件:

${EDITOR:-atom}

字符串
如果变量EDITOR有非空值,则扩展到EDITOR的内容,如果它为空或未设置,则扩展到atom。很可能您将该变量初始化为atom以外的值。试着简单地使用atom,像这样:

fe() {
local files
  IFS=$'\n' files=($(fzf-tmux --query="$1" --multi --select-1 --exit-0))
  [[ -n "$files" ]] && atom "${files[@]}"
}


当然,您也可以保持该函数的原样,但要确保您的环境包含类似EDITOR=atom的内容。

wixjitnu

wixjitnu2#

我的wrote a function,我保持在我的.bashrc,你可以用它来选择任何文件通过fzf,并有他们传递到任何程序你想要的(所以不仅sublime,但任何GUI程序,你添加到函数的列表),它也与命令行工具,如cd,猫,尾巴,头等。你也可以通过你的历史循环回来,找到命令,因为它是在fzf做了它的事情后展开的。如果你配置fzf在默认情况下(或see here)查看文件系统上的许多常见位置,这个函数就非常有用。我每天使用它很多次,主要是为了改变目录(f cd)或打开文件。
在您的情况下,您只需在终端中输入:

f sublime

字符串
和fzf将启动,在您选择您的文件(s)崇高将打开它们。
我把函数放在下面,我在这里得到了它的灵感

#!/bin/bash

# Run command/application and choose paths/files with fzf.
# Always return control of the terminal to user (e.g. when opening GUIs).
# The full command that was used will appear in your history just like any
# other (N.B. to achieve this I write the shell's active history to
# ~/.bash_history)
#
# Usage:
# f cd [OPTION]... (hit enter, choose path)
# f cat [OPTION]... (hit enter, choose files)
# f vim [OPTION]... (hit enter, choose files)
# f vlc [OPTION]... (hit enter, choose files)

f() {
    # if no arguments passed, just lauch fzf
    if [ $# -eq 0 ]
    then
        fzf | sort
        return 0
    fi

    # store the program
    program="$1"

    # remove first argument off the list
    shift

    # store any option flags
    options="$@"

    # store the arguments from fzf
    arguments=$(fzf --multi)

    # if no arguments passed (e.g. if Esc pressed), return to terminal
    if [ -z "${arguments}" ]; then
        return 1
    fi

    # sanitise the command:
    # put an extra single quote next to any pre-existing single quotes
    # put single quotes around each argument
    # put them all on one line.
    for arg in "${arguments[@]}"; do
        arguments=$(echo "$arg" | sed "s/'/''/g;
                                       s/.*/'&'/g;
                                       s/\n//g"
                   )
    done

    # if the program is on the GUI list, add a '&'
    if [[ "$program" =~ ^(nautilus|zathura|evince|vlc|eog|kolourpaint)$ ]]; then
        arguments="$arguments &"
    fi

    # write the shell's active history to ~/.bash_history.
    history -w

    # add the command with the sanitised arguments to .bash_history
    echo $program $options $arguments >> ~/.bash_history

    # reload the ~/.bash_history into the shell's active history
    history -r

    # execute the last command in history
    fc -s -1
}

n8ghc7c1

n8ghc7c13#

对于那些寻求在MacOS中打开结果的一般方法的人:

定义此别名以通过操作系统默认应用程序打开文件(基于所选文件类型):

alias f='open "$(fzf)"'

字符串
然后键入f命令,找到您的文件并点击ENTER

9jyewag0

9jyewag04#

oneliner(基本上)我只是从我的.zshrc复制:

f() {
    $1 $(fd -H . | fzf-tmux -u 30% --query="$2" -m --height=~30% --layout=reverse --border=rounded --margin=0,1 --info=right --separator== --scrollbar=↓ --select-1 --exit-0)
}

字符串
它有点“生硬”,但它确实是我需要的。代码应该是非常不言自明的。使用此代码,您可以执行以下操作:

$ f nvim "'init.lua"


这将直接带您到您的nvim配置。当然还有很多其他的用例,但我喜欢这一个;)(尽管它有一系列问题:不工作w/别名等)

相关问题