小编Kar*_*mer的帖子

正确处理bash完成中的空格和引号

在bash完成中处理空格和引号的正确/最佳方法是什么?

这是一个简单的例子.我有一个命令words(例如,字典查找程序),它将各种单词作为参数.支持的"单词"实际上可能包含空格,并在名为的文件中定义words.dat:

foo
bar one
bar two
Run Code Online (Sandbox Code Playgroud)

这是我的第一个建议的解决方案:

_find_words()
{
search="$cur"
grep -- "^$search" words.dat
}

_words_complete()
{
local IFS=$'\n'

COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"

COMPREPLY=( $( compgen -W "$(_find_words)" -- "$cur" ) )

}
complete -F _words_complete words
Run Code Online (Sandbox Code Playgroud)

‘words f<tab>’正确键入完成命令‘words foo ’(带尾随空格),这很好,但‘words b<tab>’它建议‘words bar ’.正确的完成将是‘words bar\ ’.而对于‘words "b<tab>’‘words 'b<tab>’它不提供建议.

这是我能够解决的最后一部分.可以使用eval正确解析(转义)字符.然而,eval是不是喜欢缺失报价的,所以要得到的一切工作,我不得不改变search="$cur",以

search=$(eval echo "$cur" 2>/dev/null ||
eval echo "$cur'" 2>/dev/null …
Run Code Online (Sandbox Code Playgroud)

bash quotes eval autocomplete escaping

26
推荐指数
3
解决办法
6376
查看次数

如何从fmt隐藏ANSI颜色转义码

我使用(GNU)fmt格式化具有良好("最佳")换行符的较长文本.但是,如果文本包含任何ANSI颜色转义序列(从不显示,并且仅用于在显示文本时为文本着色),请将fmt这些视为普通字符,并计算错误的行长度.

我不确定文字转义字符在这里有多好用,所以这里有一个grep用于生成ANSI序列的简单示例.让我们从一个长字符串开始格式化.

string="Here’s an example of a rather long \
string with quite a few words in the middle \
that grep chooses to colour red."
Run Code Online (Sandbox Code Playgroud)

如果我们不突出显示grep匹配,一切正常:

echo $string | grep --color=no i | fmt -w 50
Run Code Online (Sandbox Code Playgroud)

但是如果我们突出显示/着色它们,则fmt认为包含字母"i"的线条比它们实际上要长得多,并且当它们显示在终端中时它们显示为相当短的线条.

echo $string | grep --color=yes i | fmt -w 50
Run Code Online (Sandbox Code Playgroud)

有办法避免这种情况吗?对于这个例子我当然可以使用fmt 之前 grep,但是当搜索字符串跨越几个单词时,这不起作用.

colors ansi-escape

5
推荐指数
1
解决办法
861
查看次数

ggplot2 平铺图,具有不同高度的水平面板

这基本上是同样的问题这一个,但有一个重要的区别:我想基于GGPLOT2瓦情节与板,并在所有拼贴的高度相等。另一个问题是关于垂直面板。

这是一些示例代码,基于另一个问题中的代码:

d = data.frame(sites=rep(paste("S", 1:31),each=12),
               month=factor(rep(1:12,31)),
               value=runif(31*12),
               panel=c(rep("Group 1",16*12), rep("Group 2", 12*12),
                       rep("Group 3", 3*12)))
Run Code Online (Sandbox Code Playgroud)

绘制这个使用

ggplot(d, aes(x=month, y=sites, fill=value)) + 
  geom_tile(colour="white") + facet_wrap(~panel, nrow=1)
Run Code Online (Sandbox Code Playgroud)

结果是 在此处输入图片说明

基本上,我希望每一块蓝色瓷砖向上移动,这样它们上方就没有空间。我可以使用

ggplot(d, aes(x=month, y=sites, fill=value, colour="white")) + 
  geom_tile(colour="white") + facet_wrap(~panel, scales="free_y", nrow=1)
Run Code Online (Sandbox Code Playgroud)

但这会导致高度不等的瓷砖:

在此处输入图片说明

另一个问题对垂直面板有一个很好的解决方案,但将其应用于上述代码无效。水平面板有类似的解决方案吗?

r ggplot2 facet-wrap

2
推荐指数
1
解决办法
2242
查看次数

标签 统计

ansi-escape ×1

autocomplete ×1

bash ×1

colors ×1

escaping ×1

eval ×1

facet-wrap ×1

ggplot2 ×1

quotes ×1

r ×1