2015-02-09 55 views
1

我已经把下面的函数到我~/.zshrc文件:简单ZSH功能和文件在他们的名字空间

function note() { 
    vim $HOME/Dropbox/$1.md 
} 

当我与note "20150209-132501-Recx-new note today.md"叫它例如,它创建一个新的文件,但文件名“ 20150209-132501-Recx新”。我意识到这是一个简单的问题,但我怎样才能使用全名创建注释?

+0

只要你拨打电话时'note'它应该工作的引用文件名(或至少是空格)。至少它在zsh-5.0.5上对我有用,它可能不适用于旧版本(5.0之前)。你是否试过用双引号('vim“$ HOME/Dropbox/$ 1.md”')引用函数内部的完整路径? – Adaephon 2015-02-10 08:29:10

回答

0

壳执行按照该顺序参数替换和字分割。 这意味着你最终执行

vim /home/username/Dropbox/20150209-132501-Recx-new note today.md.md 

也就是说,你用三个文件名称来调用vim。如果要抑制上取代部分字拆分,则必须在函数定义使用引号还有:

function note() { 
    vim "$HOME/Dropbox/$1.md" 
} 

note "20150209-132501-Recx-new note today" 

EDIT 1叫它:这版本note连接所有参数与单个空间:

function note() { 
    filename=$1 
    while test $# -gt 1; do shift; filename="$filename $1"; done 
    vim "$HOME/Dropbox/$filename.md" 
} 

编辑2:这可能是更容易:

function note() { 
    vim "$HOME/Dropbox/$*.md" 
} 
+0

我不认为我很清楚。我想要做的是这样调用该函数:'注意20150209-132501-Recx-新的注释today'并让它执行此:'VIM“20150209-132501-Recx新笔记今天”'。在函数中放入'vim“$ HOME/Dropbox/$ 1.md”'不能达到目的。有效地将引号忽略 – pdoak 2015-02-11 09:38:46

+0

@pdoak:这是不可能的。外壳总是将空间分开。如果空格应该是文件名的一部分,你必须**使用引号。 – Jens 2015-02-11 09:43:14

+0

你的意思是什么,我想实现是不可能的,或者把'“$ HOME/Dropbox的/ $ 1.md”'引号不会达到我想要的。谢谢你的建议。 – pdoak 2015-02-11 13:14:37