gnome 终端中的向上箭头用于查看命令行历史记录,忽略以空格开头的命令。有解决方法吗?

gnome 终端中的向上箭头用于查看命令行历史记录,忽略以空格开头的命令。有解决方法吗?

在编写 Python 代码(使用 gvim)时,我经常将测试用例的复杂命令行命令保存在文档字符串中。我常犯的一个浪费时间的错误是从 Python 文件中复制整行并将其粘贴到终端中。

例如我的一个函数如下所示

@profile
def incremental_test(ibs, qaid_list, daid_list=None):
    """
    Plots the scores/ranks of correct matches while varying the size of the
    database.

    Args:
        ibs       (list) : IBEISController object
        qaid_list (list) : list of annotation-ids to query

    CommandLine:
        python dev.py -t inc --db PZ_MTEST --qaid 1:30:3 --cmd

        python dev.py --db PZ_MTEST --allgt --cmd

        python dev.py --db PZ_MTEST --allgt -t inc

        python dev.py -t inc --db PZ_MTEST --qaid 1:30:3 --cmd

        python dev.py -t inc --db PZ_Master0
        python dev.py -t inc --db GZ_ALL --ninit 100 --noqcache

    Example:
        >>> from ibeis.all_imports import *  # NOQA
        >>> ibs = ibeis.opendb('PZ_MTEST')
        >>> qaid_list = ibs.get_valid_aids()
        >>> daid_list = None
    """
    from ibeis.model.hots import automated_matcher
    ibs1 = ibs
    num_initial = ut.get_argval('--ninit', type_=int, default=0)
    return automated_matcher.incremental_test(ibs1, num_initial)

我想将其中一个命令复制到终端中进行测试。

最初,当我复制并粘贴其中一行时,运行正常,但如果我更改代码并想再次运行测试,我发现自己需要按向上箭头才能转到历史记录中的上一个命令。但由于该命令有前导空格,所以我得到了其他命令。更糟糕的是,上一个命令通常非常相似;也许我添加了 --verbose 标志或其他东西,所以我并不总是能立即发现它。

目前我的解决方法是,我必须小心地从第一个非空白字符的开头复制命令,或者我必须重新粘贴命令。这两个选项都破坏了我的编码节奏,我经常发现自己想要一个更好的解决方案。

通过这个修改的例子,我的问题是:

有没有一种方法可以配置 gnome-terminal,以便当您按向上箭头时,即使它有前导空格,它也会为您提供最后一个命令。

我想另一种解决方法是在 vim 中使用 ctrl+shift+c 将该行复制到剪贴板但删除空格,但我更喜欢终端黑客。

答案1

这是由ignorespace中的值引起的$HISTCONTROL。来自man bash

组织控制

用冒号分隔的值列表,控制命令在历史列表中的保存方式。如果值列表包含 ignorespace,则以空格字符开头的行不会保存在历史列表中。

这可能是由HISTIGNORE变量引起的,尽管它通常包含要跳过的命令。

~/.bashrc只需通过设置不同的默认值来重新配置你的 shell 历史记录,例如

HISTIGNORE=ignoredups

相关内容