在编写 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