我使用搭载 OSX 10.7.2 的 MacBook Air。
我想创建一个执行以下操作的别名:
- 使用以下方式打开 TextMate~/.bashrc并允许我编辑它
- 一旦我关闭 TextMate,“来源”~/.bashrc(因此,如果我添加一个新的别名,它将立即可用)
我尝试了以下操作:
alias b="/usr/bin/mate -w ~/.bashrc; source ~/.bashrc"
但它不起作用:当我关闭 TextMate 时,shell 没有返回(我没有看到 shell 提示符)。
有任何想法吗?
答案1
我没有 TextMate,但使用您的示例和 emacs 可以正常工作。可能是 TextMate 的问题?您可以尝试其他编辑器吗?
答案2
好的,这里有几个攻击角度:
1)简化。您是否尝试过别名之外的命令来查看它是否有效?
/usr/bin/mate -w ~/.bashrc; source ~/.bashrc
更好的测试可能是使用尚不存在的文件:
FILE=$TMPDIR/matewaiting-$(uuidgen); /usr/bin/mate -w $FILE; ls -al $FILE
如果您获得文件列表,则表示等待。如果您在文件中输入内容并保存后仍收到错误,则表示没有等待。
2)中的多个二进制文件$PATH
。 您没有提到您使用的是哪个版本,我们应该检查一下......
$ mate --version
mate 2.4 (2013-11-03 revision 9495)
如果您没有看到上述内容,而是看到类似 的内容mate r1577 (2012-07-11)
,则说明您的 中有多个 mate 二进制文件,$PATH
并且您正在使用旧版本。在这种情况下,请反复运行以下命令并移动/重命名/删除任何较旧的 mate/mate_wait,直到您最终看到最新版本...或 中用尽匹配的命令$PATH
:
for MATE in mate{,_wait}; do
p="$(which $MATE)"
echo "$p: $("$p" --version)"
done
实际上,你应该也删除新的,因为它们可能已被cp
“添加”(您永远不能对您的操作系统过于偏执 :-)。以下命令将命令硬链接到您的 /usr/local/bin,以便当它们被 TextMate 2 更新时/如果它们被更新,它们会自动更新:
# This is just in case you changed the TM2 bundle name in /Applications
# Using Spotlight...might as well, since it turns every Mac into a heliport...
[[ -n "$TM2" ]] || TM2="$(mdfind '(kMDItemCFBundleIdentifier=com.macromates.TextMate.preview)')"
if [[ -n "$TM2" ]]; then
# Search for the mate binary within the TM2 directory
MATE="$(find "$TM2" -name mate)"
if [[ -n "$MATE" ]]; then
# Hard-link both mate and mate_wait to the
# mate binary into /usr/local/bin
for cmd in mate{,_wait}; do
ln -f "$MATE" /usr/local/bin/$cmd
echo "Linked /usr/local/bin/$cmd to $MATE"
done
else
echo "ERROR: No mate found in $TM2"
fi
else
echo "ERROR: Could not find TextMate 2 app bundle in /Applications."
echo "Please set TM2 environment variable with full path"
fi
当然,这假设您有一个/usr/local/bin
并且它实际上在您的$PATH
(希望在/usr/bin
和的前面/usr/sbin
)...
3)抛弃别名! 我也有实物但我的是功能(读作:比字典中定义的别名更好)并且它是用轻微地更具防御性的编程(即针对我最大的敌人:我!)这是我的.aliases
档案
# Remove all aliases
unalias -a
alias aliases='alias '
# Re-read the aliases
realias() {
local editor="${VISUAL:-emacs}"
if [[ -z $editor ]]; then
echo "realias: VISUAL environment variable unset" > /dev/stderr
return
fi
[[ "$editor" =~ .*mate$ ]] && editor="$editor -w "
"$editor" $HOME/.aliases
source $HOME/.aliases
}
$VISUAL
在我的 .bashrc 中设置为 emacs,但在 Mac OS X 上,它稍后会重置为$(which mate 2>/dev/null)
。