2015-10-09 2 views
-6

Я знаю, что последнее не работает и что первое правильное, но есть ли синтаксическая материя, которая делает второй метод неправильным?Почему мы должны набирать vim ~/.vimrc и почему не просто vim ~ .vimrc?

cd ~ приводит меня в мой домашний каталог, так почему же не работает vim ~ .vimrc? Почему существует необходимость в «/»?

+1

Это не по теме, но почему бы вам не понадобиться косая черта? Если у вас есть каталог под названием «foo», который содержит файл под названием «bar.txt», вы ожидаете, что «vim foobar.txt» будет работать? – JJJ

+0

Это не в каталоге, Юхана. – geoyws

+0

Ваш домашний каталог не является каталогом? – JJJ

ответ

11

Потому что ~foo расшифровывается вашей оболочкой, пока Vim не увидит ее, и ваша оболочка расширяет ~foo в домашний каталог пользователя foo. В частности, ~ является просто ярлыком для ~<yourusername>. Это условные обозначения оболочки, они не имеют ничего общего с Vim.

+2

Я думаю, что речь шла не о «виме», а о том, чтобы найти разумную причину выбора этого соглашения. Это «просто» выбор или есть и преимущество? – Mathiou

+0

@Mathiou Тогда вопрос имеет еще меньший смысл. Примерно 40 лет назад родной ОС на машинах PDP-11 был CP/M, который был своего рода примитивным MS-DOS. UNIX была попыткой реализовать полезную операционную систему на PDP-11, и она началась как (жестоко) разделенная MULTICS. В частности, концепция оболочки была унаследована от MULTICS. Чтобы понять, почему '~ foo' имеет больше смысла как« домашний каталог 'foo'», а затем «foo» в моем доме »на MULTICS, вам нужно ознакомиться с кругом идей MULTICS. Удачи вам это в 2015 году. –

+0

@geoyws Ты заработал у меня нисходящий снимок, чтобы не тратить время на понимание отношения между оболочкой и всем остальным. Это действительно базовая концепция. Не могу прокомментировать причины других людей для downvotes. –

-1

Что делать, если у вас есть файл под названием '~ .vimrc'? Я думаю, что единственное отличие состоит в том, что он избегает двусмысленностей с именем файла, начиная с ~, но я могу ошибаться.

+5

Если у вас есть файл с именем '~ .vimrc', вам нужно будет сделать что-то вроде' vim \ ~ .vimrc' или 'vim '~ .vimrc'', чтобы его изменить, чтобы предотвратить расширение оболочки' ~ '. Это связано с оболочкой, а не с Vim. –

+0

Мне «vim ~ .vimrc» отлично работает. Я не говорил, что это связано с Вимом, я мог бы использовать команду «больше» или «голова», и результат был бы таким же. – Mathiou

+0

Для меня vim ~ .vimrc не работает. Он открывает новый файл. Он не попадает в файл .vimrc. Возможно, это OSX. – geoyws

2

Поскольку ваша файловая система является иерархической, вам нужен способ выражения отношений родитель-потомок при перемещении.

Самый простой способ - использовать разделитель пути, например / (unix) или \ (windows): слева у вас есть родительский и справа, у вас есть ребенок.

В Linux, путь к домашней директории:

/home/username/ 

путь к вашему vimrc является:

/home/username/.vimrc 

где .vimrc является потомком username/, сам ребенок home/, сам ребенок /.

В unix-подобных системах ~ является ярлыком для вашего домашнего каталога, поэтому ~/.vimrc - это то же самое, что и /home/username/.vimrc.

Ребенка. Родитель. Разделитель путей. Просто.

1

Синтаксис должен быть разборчивым, чтобы оболочка могла понять, как расширить то, что вы ему даете.

Попробуйте это на системе Linux:

sudo useradd -m .vimrc 
vim ~.vimrc 

Vim будет открыт, но он будет смотреть на каталог /home/.vimrc/.

Это патологический случай, который вы редко или никогда не видели в реальном мире? Да. Означает ли это, почему синтаксис аргументов, которые вы передаете, должен быть последовательным и использовать такие вещи, как разделители путей? ИМО, да.

Если я скажу свою раковину vim ~dan, то что должно это сделать? Должен ли он попытаться открыть /home/dan/? Или /home/dan/dan?

Если я скажу свою оболочку 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 не изменится. Но ни одна из этих вещей не верна.

Корпуса подобны любому языку программирования таким образом: ясность имеет значение.

Смежные вопросы