鱼壳3.2.0发布

2021-03-01 22:40:17

撤消和重做对命令行编辑器和寻呼机搜索的支持(#1367)。默认情况下,撤消绑定到Control + Z,重做绑定到Alt + /。

现在,可以在读取所有数据之前输出内建函数。例如,字符串替换不再必须先读取所有stdin才能开始输出。这使得它也可用于尚未完成上一个命令的管道,例如:

提示现在将被截断,而不是被">替换。 "如果它们比终端宽(#904)。例如:

仍然可以对提示中的COLUMNS变量做出反应,以实现更智能的行为。

即使用户有共同的前缀,fish也可以在按下Tab键后完成模糊的补全,而无需用户再次按下Tab键(#6924)。

在每条命令执行完后,fish对于重置终端模式(例如流控制)的积极性都较低。尽管默认情况下流量控制保持关闭状态,但是进取的用户现在可以使用stty(#2315,#7704)启用它。

一个新的" fish_add_path" helper函数可将路径添加到$ PATH而不产生重复项,可交互使用或在config.fish中使用(#6960,#7028)。例如:

会将/ opt / mycoolthing / bin添加到$ fish_user_path的开头,而不会创建重复项,因此可以从config.fish中安全地调用它,也可以以交互方式对其进行调用,并且该路径只存在一次。

>测试1 = 2并回显true或falsetest:期望像' -a'这样的组合运算符在索引41 = 2处回显true或回显false ^

文档和基于Web的配置的新主题(#6500,#7371,#7523)与fishshell.com上的设计匹配。

fish --no-execute将不再抱怨未知的命令或不匹配的通配符,因为在运行时可以对它们进行不同的定义(尤其是对于函数)。这使其可用作静态语法检查器(#977)。

字符串匹配--regex现在将命名为PCRE2的捕获组集成为fish变量,从而允许直接从字符串匹配中设置变量(#7459)。为了支持此功能,字符串现在是保留字,不能再包装在函数中。

全局和其他扩展项限制为512,288个结果(#7226)。因为操作系统限制了命令的参数数量,所以较大的值无论如何都不太可能起作用,这有助于避免挂起。

面向bash用户的新鱼文档页面快速概述了bash和fish(#2382)之间的脚本差异,并且完成教程也已移至其自己的文档中(#6709)。

可以省略索引范围扩展(例如$ x [$ start .. $ end])中的范围限制:$ start和$ end分别默认为1和-1(最后一项)(#6574):

遍历时,正好为\ * \ *的段现在可以匹配零个目录。例如,\ * \ * / foo可能与当前目录中的foo相匹配(#7222)。

类型_(gettext)。 (source)和:(no-op)功能现在是为实现性能而内置的(#7342,#7036,#6854)。

设置和后台作业不再覆盖$ pipestatus(#6820),从而改善了它在命令替换中的使用(#6998)。

现在,状态之类的已计算(" electric")变量在作用域中仅是全局变量,因此set -Uq status返回false(#7032)。

set --show的输出已缩短,仅提及存在变量的范围(#6944)。另外,它现在显示变量是否为路径变量。

将新变量fish_kill_signal设置为终止最后一个前台作业的信号,如果该作业正常退出,则将其设置为0(#6824,#6822)。

string sub具有一个新的--end选项,用于指定子字符串的结束索引(#6765,#5974)。 字符串拆分具有一个新的--fields选项,用于指定要输出的字段,类似于cut -f(#6770)。 如果不匹配捕获组,则字符串替换不再打印错误,而是将其视为空(#7343)。 如果未提供参数(甚至没有格式字符串),printf将不再打印错误。 fish_indent现在可以在简单的情况下删除不必要的引号(#6722),并获得了--check选项,以仅检查文件是否正确缩进(#7251)。 fish_indent缩进以反斜杠|,&& 或||。 如果更改成功,pushed仅将目录添加到堆栈中(#6947)。

每当后台作业停止或结束,或者任何作业从信号终止(#6959,#2727,#4319)时,都会调用新的fish_job_summary函数。现在可以通过重新定义默认行为来对其进行自定义。

status获得了新的dirname和basename便捷子命令,以仅获取正在运行的脚本的目录或其名称,以简化诸如运行(dirname(状态文件名))之类的常见任务(#7076,#1818)。

现在可以更顺畅地处理破裂的管道;尤其是,错误的中间管道重定向会导致作业继续运行,但损坏的文件描述符将替换为封闭的文件描述符。这样可以实现更好的错误恢复,并且与其他shell更加一致。行为(#7038)。

作业-安静的PID不再打印"没有合适的作业"如果PID作业不存在(例如因为已完成)(#6809,#6812)。

当作业控制关闭时,例如在config.fish(#7183)中,disown不再应该创建僵尸进程。

命令,作业和类型内置命令支持--query作为-q的长格式,与其他内置命令匹配。长格式--quiet已弃用(#7276)。

argparse不再对仅用于长期的选项(#7585)要求使用短标志字母,而仅打印带有无效选项的回溯跟踪到argparse自身(#6703)。

argparse现在将验证变量(例如$ _flag_value)作为本地导出的变量进行传递,从而避免了在验证函数中使用--no-scope-shadowing的需求。

如果不使用--command / -c选项,则complete将第一个参数用作命令的名称,因此complete git被视为complete --command git,并且它可以显示带有完整COMMANDNAME的特定命令的已加载完成( #7321)。

set_color -b(不带参数)不再打印错误消息,与该命令的其他无效调用匹配(#7154)。

set --erase和abbr --erase现在可以一次性擦除多个东西,匹配功能--erase(#7377)。

abbr --erase不使用任何参数或使用未设置的缩写(#7376,#7732)时,不再显示错误。

test -t,用于测试文件描述符是否连接到终端,适用于文件描述符0、1和2(#4766)。在其他情况下,它仍可能返回错误的结果(#1228)。

现在,尝试以超过操作系统限制的参数执行命令会产生特定错误(#6800)。

委托给具有相同名称的命令的别名不再触发有关递归完成的错误(#7389)。 math现在具有--base选项,以十六进制或八进制形式输出结果(#7496),并产生更具体的错误消息(#7508)。 fish会在出现错误(包括$ foo [之类的无效扩展名)之后,以更一致的方式退出状态。 鱼处于私有模式时使用read --silent会将这些可能敏感的条目添加到历史记录中; 此问题已得到解决(#7230)。 现在,read可以从其他文件中进行交互读取,并且可以用于通过read< / dev / tty(如果操作系统提供了/ dev / tty)从终端进行读取(#7358)。 添加了一个新的fish_status_to_signal函数,用于将退出状态转换为信号名称(#7597,#7595)。 现在,函数和类型说明了通过源定义函数的时间,而不仅仅是在-中定义了。

echo不再在参数的开头解释选项(例如echo" -n foo")(#7614)。

即使未设置HOME环境变量,fish也可以找到用户配置(#7620)。

fish --profile现在仅在fish准备好执行命令(所有配置完成)之后才开始分析。有一个新的--profile-startup选项,仅用于配置启动和配置过程(#7648)。

内建函数返回的最大退出状态为255,而不是潜在的溢出。特别是,这会影响退出,返回,--query和set --query(#7698,#7702)函数。

使用封闭的stdin运行内置命令不再是错误。例如,计数<&-现在显示0,而不是失败。

块,函数和内建函数不再允许重定向到0(标准输入),1(标准输出)和2(标准错误)以外的文件描述符。例如,echo hello>& 5现在是错误。这样可以防止内部状态损坏(#3303)。

fish现在将始终尝试以交互方式成为流程组负责人(#7060)。这有助于避免在某些情况下挂起,并允许tmux的当前目录自检正常工作(#5699)。

交互式阅读器现在允许在逻辑运算符(&&和||)中结束一行,而不必抱怨缺少命令。 (这在语法上已经有效,但是交互式会话尚不知道)。

fish在接受以。,或-结尾的完成后不再插入空格,从而改善了提供动态完成的工具的完成(#6928)。

如果文件名在第一次按Tab时无效,但变为有效,则在下次尝试时将正确完成文件名(#6863)。

fish_key_reader和fish_indent将--version的输出发送到标准输出,与其他fish二进制文件匹配(#6964)。

仅当上一条命令产生退出状态(#6815)时,新变量$ status_generation才增加。例如,这可用于检查故障状态是由于后台作业引起的保持还是由上次运行命令实际产生的保持。

fish_greeting现在是一个函数,它读取相同名称的变量,并且默认情况下全局设置它。默认情况下,这会删除通用变量,并有助于更新问候语。但是,要禁用问候语,现在必须显式指定通用范围(set -U fish_greeting)或在config.fish中将其禁用(#7265)。

当关闭终端或外壳程序收到SIGHUP(#7014)时,由fish_exit事件触发的函数将正确运行。

fish_prompt事件在使用read时不再触发。如果您需要一个函数在脚本调用read的任何时间运行,请改用new fish_read事件(#7039)。

尝试执行语法错误的命令时会发出新的fish_posterror事件(#6880,#6816)。

现在,调试系统已从旧的编号级别完全切换到3.1中引入的新的命名类别系统。添加了许多新的调试类别,包括配置,路径,阅读器和屏幕(#6511)。有关完整列表,请参见fish --print-debug-categories的输出。

有关只读文件系统的警告已移至新的" warning-path&#34 ;;调试类别,可以通过将调试类别设置为-warning-path(#6630)来禁用它:

用于--debug-output的-o short选项fish可以正常工作,而不是产生无效的选项错误(#7254)。

鱼的调试现在也可以通过FISH_DEBUG和FISH_DEBUG_OUTPUT环境变量启用。当无法传递命令行选项时,例如在shebang中调用fish时,这将有助于调试(#7359)。

现在,在所有命令终止符(例如;或|)之后,不仅在空格中扩展了缩写,例如fish 2.7.1和之前的版本(#6970),而且在关闭命令替换后(#6658)。

现在,将使用用户专用权限创建历史记录文件,并与其他外壳程序匹配(#6926)。包含历史记录文件的目录已经是私有的,因此不应显示任何私有数据。

现在,所有情况下(#6726,#6714)的时间输出都已正确对齐,并且不再依赖于区域设置(#6757)。

找不到命令的处理已得到简化。当找不到命令时,fish现在将执行一个称为fish_command_not_found的函数,而不是触发事件,从而使替换和推理变得更加容易。带有适当事件侦听器的先前定义的__fish_command_not_found_handler函数仍将起作用(#7293)。

Control-C处理已在C ++中重新实现,因此更快(#5259),不再偶尔打印出“未知命令”。错误(#7145)或覆盖多行提示(#3537)。

Control-C不再杀死与POSIX语义匹配的后台作业(已禁用作业控制)(#6828,#6861)。

fish_update_completions获得了一个新的--keep选项,该选项通过跳过已经存在的补全来提高速度(#6775,#6796)。

open在某些系统上不再无限期挂起,因为xdg-open中的错误已得到解决(#7215)。

长的命令行在执行后(#6826)不再添加空行,并且在Backspace(#6951)下表现更好。

函数-t像记录的长选项--handlers-type一样工作,而不产生错误(#6985)。

fish现在在环境变量XDG_RUNTIME_DIR中创建该路径(如果该路径不存在),然后将其用于运行时数据存储(#7335)。

set_color --print-colors现在也尊重粗体,暗淡,下划线,反向,斜体和背景修饰符,以更好地显示其效果(#7314)。

fish Web配置工具(fish_config)在Termux for Android(#7298)上正确显示提示,并正确检测Linux 2的Windows Services(#7027)。它不再显示历史记录变量,因为它可能太大(可以使用“历史记录”选项卡代替)。它还会在另一个线程中启动浏览器,从而在某些情况下避免挂起,尤其是在Firefox的Developer Edition(#7158)中。最后,Source Code Pro字体中的错误可能会导致浏览器挂起,因此默认情况下不再选择该字体(#7714)。

funcsave获得了一个新的--directory选项,用于指定已保存函数的位置(#7041)。

帮助在MSYS2(#7113)上正常工作,并且仅在WSL(#6797)上运行时才使用cmd.exe。

按编号恢复管道作业,例如fg%1,可以正常工作(#7406)。 恢复的作业在终端仿真器中显示正确的标题(#7444)。 通过键绑定运行的命令现在使用与普通命令相同的TTY模式(#7483)。 来自完成脚本的$ status不再传递到完成之外,这使状态显示在提示符中作为最后一个命令的状态(#7555)。 fish_trace输出现在以->开头。 (例如fish --profile),使深度更明显(#7538)。 带有内联变量赋值(例如A = b)的完成过程中的崩溃已得到修复(#7344)。 fish_private_mode现在可以使用set(#7589)进行动态更改,并且历史记录以私有模式保存在内存中(但不会永久存储)(#7590)。 可以使用向上箭头从历史记录中检索带有前导空格的命令,直到运行与zsh的HIST_IGNORE_SPACE(#1383)相匹配的新命令为止。

导入bash历史记录或报告带有递归glob(\ * \ *)的错误不再挂起(#7407,#7497)。 绑定现在显示del键的\\ x7f而不是文字DEL字符(#7631) 仅当包含变量或代字号扩展的路径仍然有效时,才建议使用它们(#7582)。 如果重定向目标包含可能由当前命令行定义的变量,则不再将其重定向为错误(#6654)。 fish可以更好地拥有自己的处理组,而不受TTY的控制,从而避免了TTY的挂起(#7388)。 现在,可以通过设置fish_color_keyword变量(fish_color_command用作后备)来为关键字设置不同的颜色(#7678)。 就像fish_indent一样,交互式阅读器将缩进以反斜杠|,&& 或|| (#7694)。

可以将通用变量文件fish_variables设为符号链接,而不会被覆盖(#7466)。

如上所述,新的特殊输入功能撤消(Control + _或Control + Z)和重做(Alt- /)可用于将对命令行或寻呼机搜索字段的更改还原(#6570)。

此外,在鱼选择了明确的补全之后立即使用取消特殊输入功能(默认情况下绑定到Escape)将撤消该操作(#7433)。

Vi模式绑定现在支持dh,dl,c0,cf,ct,cF,cT,ch,cl,y0,ci,ca,yi,ya,di,da,d;,d,o,O和Control + left /右键按字词导航(#6648,#6755,#6769,#7442,#7516)。

Vi模式绑定支持〜(波浪号)来切换所选字符的大小写(#6908)。

“向上搜索”和“向下搜索”(“向上”或“向下”)功能可以跨越空行,并且如果搜索失败,则不激活搜索模式,这使得它们在某些情况下更易于在行之间移动。

如果历史记录搜索找不到匹配项,则不再移动光标。当意外在多行命令行上启动历史记录搜索时,此功能很有用。

现在,特殊的输入功能“历史开始”(Page Up)移到最早的搜索,而不是最年轻的搜索-“历史结束”(Page Down)。

一个新的特殊输入功能正向单字符向右移动一个字符,如果有自动提示功能,则仅从其中取一个字符(#7217,#4984)。

现在,虽然只有一些命令设置了退出状态(#7217),但特殊的输入功能现在可以与或作为修饰符(添加到和)结合使用。这包括抑制自动提示以反映是否抑制了自动提示(#1419)

绑定到Alt + O的新函数__fish_preview_current_file在分页器中的光标处打开当前文件(#6838,#6855)。

如果识别到编辑器,则edit_command_buffer(Alt-E和Alt-V)将光标位置传递给外部编辑器(#6138,#6954)。

__fish_prepend_sudo(Alt-S)现在可以在当前命令行为空的情况下使用前一个命令行,以简化使用sudo(#7079)重新运行前一个命令的过程。

__fish_toggle_comment_commandline(Alt-#)现在取消注释,并在命令行为空的情况下显示历史记录中的最后一条注释(#7137)。

" word"的定义和" bigword"改进了动作,用倒数第二个字符修复了e模式的行为(例如,vi模式),使用单字符单词和非空白非图形字符的bigword行为(#7353 ,#7354,#4025,#7328,#7325)

鱼的剪贴板绑定现在还通过PowerShell和clip.exe(#7455,#7458)支持Linux的Windows子系统,并将在多行命令中正确复制换行符。

在某些情况下,完成变量覆盖(foo = bar)可能会将整个内容替换为仅完成内容。此问题已得到修复(#7398)。

默认和示例提示会为前缀为not的命令打印正确的退出状态(#6566)。

git提示包括存储库中所有未跟踪的文件,而不仅仅是当前目录中的文件(#6086)。

Mercurial提示符正确显示未跟踪状态(#6906),并且默认情况下出于性能原因仅显示分支。可以设置新变量$ fish_prompt_hg_show_informative_status以启用更多信息。

Subversion提示在3.1.0中以多种方式被破坏,并且已经恢复(#6715,#7278)。

与多行提示相关的错误已修复,包括重新绘制(#5860)或导航目录历史记录(#3550)导致图形故障。 可以设置一个新变量fish_vi_force_cursor,以强制fish_vi_cursor在vi模式下尝试更改光标形状,而不考虑终端(#6968)。 fish_vi_cursor选项--force-iterm已弃用。 当光标通过右提示(#6948)或换行到下一行(#7213)时,会出现自动建议。 在所有情况下,长命令行都被换行,而不是有时被放在新行上(#5118)。 带有正确提示的会话可以在处理重排的终端中正确调整大小,例如GNOME终端(以及其他基于VTE的终端) ......