为啥我们必须输入 vim ~/.vimrc 而为啥不只输入 vim ~.vimrc? [关闭]

Posted

技术标签:

【中文标题】为啥我们必须输入 vim ~/.vimrc 而为啥不只输入 vim ~.vimrc? [关闭]【英文标题】:Why must we type vim ~/.vimrc and why not just vim ~.vimrc? [closed]为什么我们必须输入 vim ~/.vimrc 而为什么不只输入 vim ~.vimrc? [关闭] 【发布时间】:2016-01-07 02:42:03 【问题描述】:

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

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

【问题讨论】:

这是题外话,但你为什么不需要需要一个斜线?如果你有一个名为 "foo" 的目录包含一个名为 "bar.txt" 的文件,你会期望 "vim foobar.txt" 工作吗? 它不在目录中,Juhana。 你的主目录不是目录? 在你家,你家就是一个目录。 另外,cd ~ 不会把我带到根目录,而是把我带到我的主目录。 【参考方案1】:

因为~foo 在 Vim 看到它之前就被你的 shell 扩展了,你的 shell 扩展了 ~foo 到用户 foo 的主目录。特别是,~ 只是~<yourusername> 的快捷方式。这些是 shell 约定,它们与 Vim 没有任何关系。

【讨论】:

我认为问题不在于“vim”,而在于找到选择此约定的合理理由。它是“只是”一种选择还是有它的优势? @Mathiou 那么这个问题就更没有意义了。大约 40 年前,PDP-11 机器上的本机操作系统是 CP/M,这是一种原始的 MS-DOS。 UNIX 试图在 PDP-11 上实现一个有用的操作系统,它最初是一个(残酷地)剥离了 MULTICS。特别是外壳的概念是从 MULTICS 继承的。要理解为什么 ~foo 在 MULTICS 上比“foo 的主目录”和“foo 在我家”更有意义,你必须熟悉 MULTICS 的思想圈。祝你在 2015 年好运。 @geoyws 你因为没有花时间理解 shell 和其他所有东西之间的关系而赢得了我的反对。这确实是一个基本概念。不能评论其他人投反对票的原因。 还有其他人可以从这个问题中受益,但既然你对我们的学习不感兴趣,那么我想你可以继续投反对票。你不推荐阅读,你说的任何东西都没有任何证据。是什么让你认为你是这件事的权威? 我取消了你的回答。没有证据。【参考方案2】:

由于您的文件系统是分层的,因此您需要一种在移动时表达父子关系的方法。

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

在 linux 上,你的主目录的路径是:

/home/username/

vimrc 的路径是:

/home/username/.vimrc

其中.vimrcusername/ 的子代,本身是home/ 的子代,本身是/ 的子代。

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

孩子。家长。路径分隔符。很简单。

【讨论】:

【参考方案3】:

语法必须是可解析的,这样 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 来查找 homedirs,假设操作系统甚至将用户数据存储在该文件中。

我认为这类似于这样的陈述:

b = a++;

程序员对这条语句的行为感到困惑是很常见的,因为在您了解发生的事件顺序之前,您可能会认为 b 将被分配一个比 @987654336 大 1 的值@。您甚至可能期望a 不会改变。但这些都不是真的。

Shell 就像任何编程语言一样:清晰很重要。

【讨论】:

【参考方案4】:

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

【讨论】:

如果您有一个名为~.vimrc 的文件,您必须执行vim \~.vimrcvim '~.vimrc' 之类的操作来编辑它,以防止shell 扩展~。这与外壳有关,与 Vim 无关。 对我来说'vim ~.vimrc' 工作正常。我没有说它与 Vim 有关系,我也可以使用 'more' 或 'head' 命令,结果是一样的。 对我来说 vim ~.vimrc 不起作用。它会打开一个新文件。它不会命中 .vimrc 文件。也许是 OSX。 不,我的意思是如果您创建这样的文件,它就会“工作”。它不会打开 '.vimrc' 文件,而是打开你当前所在目录中的 '~.vimrc' 文件。 我的 .vimrc 文件位于主目录(我当前所在的目录)中,这是 cd ~ 将获取您的位置,而 vim ~.vimrc 不会打开它。它创建一个新文件

以上是关于为啥我们必须输入 vim ~/.vimrc 而为啥不只输入 vim ~.vimrc? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

linux 的vi编辑器为啥没有高亮显示?

为啥我的vim配置文件(.vimrc)只有添加sudo的情况下才生效。我的系统是Ubuntu的

Vim的配置

linux用wget下载网站内容,为啥中文会出现乱码

vim的简易IDE怎么配置

vim配置