В Vim откройте файл с тем же именем, что и текущий файл, но в другом каталоге - PullRequest
1 голос
/ 27 февраля 2011

Я знаю, это вопрос для начинающих !! Предположим, у нас есть две директории:

recipes/
  apple-pie.txt
  blueberry-muffin.txt
disaster-stories/
  apple-pie.txt
  blueberry-muffin.txt

Предположим также, что текущим каталогом Vim является родительский каталог как recipes/, так и disaster-stories/.

Вопрос:

Если я редактирую recipes/apple-pie.txt, я хочу иметь возможность вводить пользовательскую команду, например :dsstr, в результате чего текущий файл сохраняется и disaster-stories/apple-pie.txt открывается. Как я мог это сделать?

Ответы [ 4 ]

4 голосов
/ 27 февраля 2011

Команды можно объединять, разделяя их в командной строке vim символом канала.

:w | e disaster-stories/apple-pie.txt

Vim расширит % до текущего отредактированного имени файла в командах командной строки.Вы можете добавить некоторые модификаторы для различных манипуляций с именем файла (см. модификаторы имени файла в руководстве).Например, %:t - это хвост (последний компонент) имени файла;если % дает recipes/apple-pie.txt, то %:t дает apple-pie.txt.

:w | e disaster-stories/%:t

Обычно, когда я хочу делать такие вещи, я не беспокоюсь о пользовательском ключе-bindings.Если вы недавно использовали подобную команду, вы можете ввести ее префикс (:w |) и использовать клавишу со стрелкой вверх, чтобы удобно вызывать ее из истории.

3 голосов
/ 27 февраля 2011

Поместите это на свой vimrc:

command! -bar Dsstr w|exec 'edit '.expand('%:p:h:h').'/disaster-stories/'.expand('%:t')

Затем вы можете использовать :Dsstr, чтобы перейти к этому файлу.

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

EDIT Теперь краткое описание с указателями на помощь Vim для более подробной информации:

  • command!: создать команду и перезаписать ее, если она существует. : help: команда
  • -bar: разрешить | объединить команду. : h: командная строка
  • Dsstr: пользовательские команды должны начинаться с заглавной буквы.
  • w|: написать, затем выполнить следующую команду. : h: bar
  • exec: выполнить аргументы как команду ex. : h: выполнить
  • expand(): см .: h expand ()
1 голос
/ 27 февраля 2011

РЕДАКТИРОВАТЬ: Хорошо, у меня есть решение для вас. Я не уверен, как написать функцию в vim, но вы можете просто написать скрипт оболочки, который сделает всю работу за вас. Я попытался написать сценарий, который сохранит ваш текущий файл, выйдет, чем переключится на новый файл, но столкнулся с некоторыми ошибками. Но это позволит вам просто набрать:

 :w | ! scriptName

! говорит vim запустить команду типа "cd" или "ls".

Шаги для создания сценария оболочки:
-CD
-mkdir bin (если bin еще не существует в ~)
-cd bin <- Вы хотите сделать скрипт в ~ / bin, чтобы linux мог его найти -vim nameOfScript (это то, что вы наберете для запуска команды. Например, если вы назвали его «vimScript», он запустит набранный вами «vimScript». В идеале вы захотите использовать что-то короткое, например «vc» (vim) изменить) </p>

-Введите следующий текст:
#! / Bin / Баш
vim -c e {)

-Примечание: первая строка, #! / Bin / bash сообщает Unix / Linux, что это скрипт. vim -c e pathToFile заставляет его выполнить команду "vim -c e pathToFile" -сохранить и выйти
-chmod + x nameOfscript <-Это делает сценарий исполняемым <br> -Наслаждаться! Теперь вы можете теперь сохранить свой файл и перейти к следующему, набрав:

 :w | ! nameOfScript  

Несколько замечаний: это работает только в одну сторону. Вам нужно будет либо написать две отдельные команды, одну для переключения на один файл и одну для переключения на другой, либо добавить больше в сценарий. Лучше всего было бы добавить больше, поскольку это позволит вам легче добавлять больше файлов в него позже.

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

Если у вас есть какие-либо вопросы, просто задавайте! Еще несколько ссылок ниже:

Вот несколько ссылок на написание сценариев оболочки:
http://linuxcommand.org/wss0010.php
http://linuxcommand.org/writing_shell_scripts.php
http://www.freeos.com/guides/lsst/

Кроме того, эти две ссылки могут оказаться полезными в будущем:

http://vimhelp.appspot.com/vim_faq.txt.html
http://vim.wikia.com/wiki/Vim_Tips_Wiki

0 голосов
/ 02 марта 2011

Я думаю, вы хотите узнать больше об управлении буфером в vim.Как только оба файла загружены как буферы, вы, вероятно, можете переключаться между ними с помощью :b appl<tab> Конечно, если вы редактируете 10 Makefile одновременно, это плохо масштабируется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...