将单个sed命令转换为可重用的Textmate命令

将单个sed命令转换为可重用的Textmate命令,text,editor,sed,textmate,Text,Editor,Sed,Textmate,我有7行文字: a b c d e f g 现在,我想在每行末尾添加字符,以: a, b, c, d, e, f, g, 我发现我可以使用“sed”命令,并使用Textmate中的“Filter-through命令”在sed中运行我的选择 sed 's/$/,/' 现在,还有一个问题:如何将其转换为以某种方式接收输入的Textmate命令(以便它知道要追加什么文本) (我这样做的尝试被证明是不成功的)在文本菜单中已经有一个命令“编辑所选内容中的每一行””正是这样做的。它会将光标放在第一行,

我有7行文字:

a
b
c
d
e
f
g
现在,我想在每行末尾添加字符,以:

a,
b,
c,
d,
e,
f,
g,
我发现我可以使用“sed”命令,并使用Textmate中的“Filter-through命令”在sed中运行我的选择

sed 's/$/,/'
现在,还有一个问题:如何将其转换为以某种方式接收输入的Textmate命令(以便它知道要追加什么文本)


(我这样做的尝试被证明是不成功的)

文本菜单中已经有一个命令“编辑所选内容中的每一行””正是这样做的。它会将光标放在第一行,您在那里键入的内容会在每一行上重复。

在bundle编辑器中创建一个新命令

#!/bin/bash
sed 's/$/,/'
在输入下拉列表中选择所选文本或无
在输出上选择替换现有文本

我刚测试过,效果很好

您还可以选择键盘快捷键以提高效率。

如果您愿意避免命令路径,只需使用“查找/替换”对话框,只需执行以下操作:

  • 突出显示/选择要附加到的行
  • 打开“查找”对话框
  • 选中“正则表达式”
  • 在“查找”字段中,添加
    “$”
    (以指示行尾)
  • 在“替换”字段中,添加“”,“(您希望附加的内容)
  • 按住
    选项
    ,这会将“全部替换”更改为“选择中”

这项技术可以应用于许多其他有用的方法。例如,将
'$'
更改为
'^'
,如果要为每一行添加前缀。

将其弹出到文本包中的命令中,它会将剪贴板中的任何内容附加到已选择的所有行的末尾:

#!/bin/bash
if [[ $(pbpaste|wc -l) -eq 0 ]]
    then r=`pbpaste`
    sed 's/$/'$r'/'
    else sed 's/$/,/'
fi
当前它仅限于追加一行文字,如果剪贴板包含多行文字,则默认情况下会在选定行的末尾添加逗号

编辑:

为了进一步说明这一点,下面是一个版本,它提供了一个对话框,提示输入将附加到选择中每一行的字符串:

#!/bin/bash
r=$(CocoaDialog inputbox --title "String to be appended to EOL" \
   --informative-text "Enter string:" \
   --button1 "Okay" --button2 "Cancel")

[[ $(head -n1 <<<"$r") == "2" ]] && exit_discard

r=$(tail -n1 <<<"$r")

sed "s/$/$r/"
#/bin/bash
r=$(CoCoLoadDialog输入框--标题“要附加到EOL的字符串”\
--信息文本“输入字符串:”\
--按钮1“好”——按钮2“取消”)

[[ $(head-n1我知道;但它似乎无法预弯。如果我将光标放在行的开头,点击快捷键,然后它跳到行的末尾。我可以使用列选择,但我再次使用鼠标,速度不够快。列选择不需要鼠标。使用page up+shift,完成后按option。我不知道但是在textmate中,如果您知道sed/ruby/regex+ruby等,您可以很容易地编写bundle命令,用sed处理的文本替换选择。