为什么我们必须输入vim~/.vimrc,为什么不只输入vim~.vimrc?

为什么我们必须输入vim~/.vimrc,为什么不只输入vim~.vimrc?,vim,terminal,Vim,Terminal,我知道后者不起作用,前者是正确的,但是否有句法问题导致第二种方法错误 cd~将我带到我的主目录,那么为什么vim~.vimrc不工作呢? 为什么需要“/”,因为在Vim看到它之前,~foo由shell展开,而shell将~foo展开到用户foo的主目录。特别是,~只是~的快捷方式。这些是shell约定,它们与Vim没有任何关系。如果您有一个名为“~.vimrc”的文件怎么办? 我认为唯一的区别是它避免了文件名以~开头的歧义,但我可能错了。因为文件系统是层次结构的,所以在移动时需要一种表达父子关系

我知道后者不起作用,前者是正确的,但是否有句法问题导致第二种方法错误

cd~将我带到我的主目录,那么为什么vim~.vimrc不工作呢?
为什么需要“/”

,因为在Vim看到它之前,
~foo
由shell展开,而shell将
~foo
展开到用户
foo
的主目录。特别是,
~
只是
~
的快捷方式。这些是shell约定,它们与Vim没有任何关系。

如果您有一个名为“~.vimrc”的文件怎么办?
我认为唯一的区别是它避免了文件名以~开头的歧义,但我可能错了。

因为文件系统是层次结构的,所以在移动时需要一种表达父子关系的方法

最简单的方法是使用路径分隔符,如
/
(unix)或
\
(windows):左侧为父级,右侧为子级

在linux上,主目录的路径为:

/home/username/
您的
vimrc
路径为:

/home/username/.vimrc
其中
.vimrc
用户名/
的子项,本身是
主页/
的子项,本身是
/
的子项

在类unix系统上,
~
是主目录的快捷方式,因此
~/.vimrc
/home/username/.vimrc
相同


孩子。父母亲路径分隔符。简单。

语法需要是可解析的,以便shell能够理解如何扩展您赋予它的内容

在Linux系统上尝试以下操作:

sudo useradd -m .vimrc
vim ~.vimrc
Vim将打开,但它将查看目录
/home/.vimrc/

这是一个你在现实世界中很少/永远不会看到的病理病例吗?对它是否说明了为什么传递的参数的语法需要一致,并使用路径分隔符之类的东西?对

如果我告诉我的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
来查找homedir,假设操作系统甚至将用户数据存储在该文件中

我认为这类似于这样一种说法:

b=a++;
程序员很容易被这条语句的行为弄糊涂,因为在您理解发生的事件顺序之前,您可能希望
b
将被分配一个大于
a
的值。您甚至可能期望
a
不会改变。但这两件事都不是真的


shell与任何编程语言一样:清晰性很重要。

这是离题的,但为什么不需要斜杠呢?如果您有一个名为“foo”的目录,其中包含一个名为“bar.txt”的文件,您是否希望“vim foobar.txt”可以工作?它不在目录中,Juhana。您的主目录不是目录?它在您的主目录中,你的主目录是一个目录。
cd~
也不会将我带到根目录,而是带到我的主目录。如果你有一个名为
~.vimrc
的文件,你必须执行类似
vim\~.vimrc
vim'~.vimrc'
的操作来编辑它,以防止shell扩展
~
。这与shell有关,而不是与Vim有关。对我来说,‘Vim~。vimrc’很好用。我没有说这与Vim有关,我也可以使用'more'或'head'命令,结果是一样的。对我来说,Vim~。vimrc不起作用。它会打开一个新文件。它没有命中.vimrc文件。也许是OSX。不,我的意思是,如果你创建这样一个文件,它“工作”。它不会打开“.vimrc”文件,但是“~.vimrc”文件将位于您当前所在的目录中。my.vimrc文件位于主目录(我当前所在的目录)中,cd~将在主目录中找到您,而vim~。vimrc不会打开它。它创建了一个新的文件我认为问题不是关于“vim”,而是关于为选择这个约定找到一个合理的理由。这“只是”一个选择,还是有好处?@Mathiou那么这个问题就更没有意义了。大约40年前,PDP-11机器上的本机操作系统是CP/M,它是一种原始的MS-DOS。UNIX试图在PDP-11上实现一个有用的操作系统,它最初是一个(残酷地)精简的MULTICS。特别是shell的概念是从MULTICS继承而来的。要理解为什么MULTICS上的
~foo
作为“foo的主目录”更有意义,那么“
foo
在我家”就必须熟悉MULTICS的思想圈子。祝你在2015年好运。@Geoys你因为没有花时间去理解贝壳和其他东西之间的关系而赢得了我的反对票。这确实是一个基本概念。不能评论其他人投反对票的原因。还有其他人可以从这个问题中受益,但既然你对我们的学习不感兴趣,那么我想你可以继续投反对票。你没有推荐阅读材料,你所说的都没有任何证据。你凭什么认为你是这件事的权威?我取消了你的回答。没有证据。