Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将package扩展到package.json,使用制表符完成,甚至使用package-lock.json_Bash_Shell_Tab Completion - Fatal编程技术网

Bash 将package扩展到package.json,使用制表符完成,甚至使用package-lock.json

Bash 将package扩展到package.json,使用制表符完成,甚至使用package-lock.json,bash,shell,tab-completion,Bash,Shell,Tab Completion,我曾经是一个非常快乐的node.js小开发者。我没有意识到我每天会运行vim package.json,但显然这是很多次。我以后再谈 通常,当我想要编辑package.json时,我会键入vim packTabEnter或者vim pacTabEnter。这是此时的肌肉记忆 自npm@5,引入了包锁.json文件。这意味着 vim pacTabEnter 打开文件包。这将导致大量额外的击键,并且工作流已更改为 vim pacTabEnter:qvim软件包。TabEnter 结果是浪费了大量的击

我曾经是一个非常快乐的node.js小开发者。我没有意识到我每天会运行
vim package.json
,但显然这是很多次。我以后再谈

通常,当我想要编辑
package.json
时,我会键入
vim pack
TabEnter或者
vim pac
TabEnter。这是此时的肌肉记忆

自npm@5,引入了
包锁.json
文件。这意味着

vim pac
TabEnter

打开文件
。这将导致大量额外的击键,并且工作流已更改为

vim pac
TabEnter
:qvim软件包。
TabEnter

结果是浪费了大量的击键、时间、挫折、眼泪和对软件以外的职业的思考

如果文件已经存在,即使
package lock.json也存在,那么有没有办法让vim或shell中的completion将
pac
pack
扩展到
package.json
?这可能是vim的完成,也可能只是一般的shell。大概我永远都不需要编辑或检查
package lock.json
,这样在完成任何操作时都可以忽略该文件。我还想确保compltion不会在不存在的情况下展开
package.json
。我也不希望这影响任何其他文件,例如,如果
circle.yml
circle bak.yml
都存在,它不应该将
circle
选项卡扩展到
circle.yml
。。。我只对
package.json
感兴趣


我尝试了
alias vimp=“vim package.json”
,但我对此不满意,因为pEnter使用同一个手指,所以打字很难。我只想让完成像我习惯的那样工作。

您可以为
vim
制定如下自定义规则:

_vim() {
  local cur
  COMPREPLY=()
  cur="${COMP_WORDS[COMP_CWORD]}"
  if [[ $cur = pac* && -f package.json ]]; then
    COMPREPLY=( package.json )
    return 0
  fi
}

complete -F _vim vim

如果您在点击Tab之前键入的内容超过了
pac
,并且存在
package.json
,那么这将自动完成到
package.json
。该行为仅对
vim

vim pac的参数启用。tab Enter
应该可以正常工作。@hek2mgl这稍微好一点,但仍然不是我想要的。我希望能够
vim pac tab Enter
将您的别名设置为
vimpa(ck?
?@ExplosionPills这是您是否真的想要的问题:)。您可以更改bash完成文件,但这将是系统范围内的。或者,在每次开始处理项目时,都可以获得自定义bash完成。如果可以的话,我可以告诉你怎么做。或者,您可以创建一个package.json的符号链接,将其命名为
foo
,并使用
vim foo
。PS:刚才看到了创建别名的建议。这可能是最好、最简单的解决方案。