我知道后者不起作用而且前者是正确的,但有没有一种语法问题会导致第二种方法错误?
cd~把我带到我的主目录,为什么vim~.vimrc没有工作? 为什么需要" /"?
答案 0 :(得分:11)
因为在Vim看到它之前,您的shell会扩展~foo
,并且您的shell会将~foo
展开到用户foo
的主目录。特别是,~
只是~<yourusername>
的快捷方式。这些是shell约定,它们与Vim没有任何关系。
答案 1 :(得分:2)
由于您的文件系统是分层的,因此在移动时需要一种表达父子关系的方法。
最简单的方法是使用路径分隔符,如/
(unix)或\
(窗口):在左侧,您有父级,在右侧,您有孩子。< / p>
在linux上,主目录的路径是:
/home/username/
vimrc
的路径是:
/home/username/.vimrc
其中.vimrc
是username/
的孩子,其本身是home/
的孩子,本身是/
的孩子。
在类似unix的系统上,~
是主目录的快捷方式,因此~/.vimrc
与/home/username/.vimrc
相同。
子。家长。路径分隔符。简单。
答案 2 :(得分:1)
语法需要是可解析的,因此shell可以理解如何扩展你提供的内容。
在Linux系统上试试这个:
sudo useradd -m .vimrc
vim ~.vimrc
Vim会打开,但它会查看目录/home/.vimrc/
。
这是一个你在现实世界中很少/永远看不到的病态案例吗?是。它是否说明了为什么你传递的参数的语法需要保持一致并使用路径分隔符之类的东西? IMO,是的。
如果我告诉我的shell vim ~dan
那么应该它呢?它应该尝试打开/home/dan/
吗?或/home/dan/dan
?
如果我告诉我的shell vim ~dan/foo
那该怎么办?是否应该尝试打开/home/dan/foo
或/home/dan/dan/foo
?
如果我将$HOME/bill/
中的结算记录保存在0001.txt
这样的文件中,如果我说vim ~bill/0001.txt
,该怎么办?如果我想要/home/bill/0001.txt
,我怎么说(以便携方式)?假设操作系统甚至将用户数据存储在该文件中,我不想解析/etc/passwd
来查找homedirs。
我认为这类似于以下陈述:
b = a++;
程序员很容易对此语句的行为感到困惑,因为在您了解发生的事件序列之前,您可能希望为b
分配一个大于1的值。 a
。您甚至可能期望a
不会改变。但这些都不是真的。
Shells就像任何编程语言一样:清晰度很重要。
答案 3 :(得分:-1)
如果您有一个名为&#39;〜.vimrc&#39;的文件怎么办? ? 我认为唯一的区别是它避免了文件名以〜开头的歧义,但我可能错了。