Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
source, причём даже без экранирования: попробуйте vim -u NONE -i NONE -S '/dev/null | echomsg 123': данная команда отличается от vim -u NONE -i NONE -c 'so /dev/null | echomsg 123' на несколько условных переходов и одно выделение памяти.Просто механизмы не отличаются и можно делать тот же source из живой сессии, как vim_prj, но без vim_prj
Конечно можно, но для этого нужно разобраться, как работают сессии в Vim и как их восстанавливать с помощью source. Думаете все хотят в этом разбираться, вместо того, чтобы установить один плагин? Да и сохранение/восстановление сессии это не единственная задача vim_prj.Ни в чём не нужно разбираться: в
:h :mksession что представляет из себя файл сессии кратко написано прямо в первой строке. А восемь строчек ниже об использовании :source написано уже в явном виде.А вы можете открыть, скажем PHPStorm или IntelliJ IDEA в любом каталоге, протестировать что-то и потом закрыть?Зачем?
Ни в чём не нужно разбираться: в :h :mksession что представляет из себя файл сессии кратко написано прямо в первой строке. А восемь строчек ниже об использовании :source написано уже в явном виде
Я могу открыть Vim для тестов в любом каталоге
А вы можете открыть, скажем PHPStorm или IntelliJ IDEA в любом каталоге
Зачем?
Затем, чтобы что‐то проверить
А для PHPStorm и IntelliJ IDEA я дополнений не пишу и исходный код их не трогаю
Ну так открываете Vim и проверяете. Я повторюсь, vim_prj не загружает сессию вне проекта. То есть, если вы открываете Vim в каталоге, в котором нет проекта, никакой сессии загружается не будет.Особенно это актуально если я проверяю что‐то, связанное с проектом и мне не нужны ни сессия, ни каталог без проекта (последнее — в первую очередь по «идеологическому» соображению «всё, связанное с проектом — в одном месте»).
То есть, если вы будите писать под PHPStorm и IntelliJ IDEA дополнения и трогать исходные коды, вы попросите от разработчиков отключения принудительного использования проектов? В отличии от PHPStorm и IntelliJ IDEA, vim_prj работает как с проектами, так и без них.Я могу приспособится к такому поведению, но скорее я просто не буду под них ничего писать. Хотя и по другим причинам.
Особенно это актуально если я проверяю что‐то, связанное с проектом и мне не нужны ни сессия, ни каталог без проекта
Я могу приспособится к такому поведению, но скорее я просто не буду под них ничего писать
Не сталкивался еще с такой ситуацией, когда нужно было проверить что-то, связанное с проектом, и загрузка сессии этому бы помешала. Отключите плагин vim_prj на время проверки и включите его снова.Загрузка сессии помешает, в первую очередь, сообщением «этот файл уже открыт в другом Vim». Во‐вторую, тем, что vim_prj ещё и сохранит потом сессию и в ней будет что‐то ненужное. А «отключение» плохо тем, что для того, чтобы «безопасно» запустить Vim нужно что‐то сделать. Гораздо лучше вариант, когда нужно «опасно» включить vim_prj: например, отключить загрузку и сохранение сессий вообще (такая настройка у вас, как вижу есть), а загружать по команде (а такого нет) и после загрузки включить сохранение.
CursorHold и CursorHoldI событий.Загрузка сессии помешает, в первую очередь, сообщением «этот файл уже открыт в другом Vim» ...
Кстати, я рекомендую сделать в дополнении автосохранение сессий
Не совсем понимаю о чем вы, так как с такими проблемами не сталкивался, хотя и работаю с vim_prj уже довольно долго.Просто откройте один проект два раза. Предварительно включите в vimrc swap файлы — это обязательное условие.
У меня для этого отдельный плагин vim_write, который автосохраняет проект каждые n секунд, как это делают многие современные IDE.Он сохраняет файлы, а не сессию.
Просто откройте один проект два раза. Предварительно включите в vimrc swap файлы — это обязательное условие.
Он сохраняет файлы, а не сессию
Такая эзотерика случается в реальной жизни, или это вакуум и сферический конь?Если отключить автозагрузку сессии, то — вакуум и сферический конь. Если не отключать и пользоваться Vim как я говорю — для быстрой проверки чего‐то в каталоге проекта, — то такое будет постоянно.
Что гораздо важнее.Так лучше сохранять и то, и то.
для быстрой проверки чего‐то в каталоге проекта
Вопрос: какая версия проекта будет проверена в уже открытом Vim?
нафига мне в «проектном» Vim буферы чисто для тестирования?
О какой «версии» проектаПредставьте себе файл
~/.vim/autoload/test.vim с содержимымfunction test#version()
return '0.0'
endfunctionВы запустили echo test#version(), убедились, что Vim выводит 0.0 и изменили 0.0 на 0.1. Что выведет echo test#version(), если Vim вы не перезапускали?и о какой «проверке» идет речь?У вас в дополнениях есть тесты. Возьмите любой. Иногда перед тем, как писать набор тестов (в основном, функциональные), я проверяю дополнение на общую корректность «вручную» на одном‐двух тестах из запланированного набора. А если на моём тесте написано «regression test», то можно быть практически уверенным, что я его сначала точно проверил именно вручную (или не его, но что‐то, вызывающее ту же ошибку).
Даже предположить не могу, зачем вам буферы чисто для тестирования.Это странно. У вас есть дополнение vim_notepad, неужели вы не писали заметки вида «Test test test»? Обычно такие буферы можно легко закрыть и всё упирается в первую проблему, но, к примеру,
AuVimDiff может открыть до (2 × число файлов в репозитории) буферов и, если что‐то в процессе сломалось, то ещё и не дать закрыть их одним клавиатурным сочетанием.python powerline.reload() для тестирования powerline в уже открытом Vim, а открываю новый. Конкретно powerline при наличии неотловленной ошибки в новом коде может просто забить Vim Traceback’ами до фактической невозможности использования Vim для редактирования. И это несмотря на то, что в отличие от вашей vim_lib мой frawor изначально предполагает возможность «перезагрузки» дополнений, написанных на его основе, да и в powerline я добавил такую же функциональность.Вы запустили echo test#version(), убедились, что Vim выводит 0.0 и изменили 0.0 на 0.1. Что выведет echo test#version(), если Vim вы не перезапускали?
Кстати, недописанные дополнения могут создавать огромные проблемы при редактировании
Я открываю Vim в каталоге ~/tmp/test_vim, там у меня создан проект спецом для тестирования плагинов. Никакой разницы нет, в каком каталоге я открою редактор (часто я делаю это в ~/), просто ~/tmp/test_vim подготовлен так, чтобы с его помощью было легко тестировать новые плагины с учетом проектного уровня загрузкиВот эта часть. Я не держу специальный каталог для тестирования, т.к. в том же терминале, где я делаю «быстрые» тесты я запускаю вещи вроде git rebase или какие‐нибудь перестановки файлов. (Нет, делать это в терминале с открытым проектом неудобно.)
Не вижу смысла запускать один и тот же проект по нескольку раз.Я не запускаю один и тот же проект несколько раз. Я запускаю несколько Vim в одном каталоге. И мне очень не нравиться идея отказа от работающего workflow.
И ещё у меня всегда подключены даже недописанные дополнения: это хорошая гарантия того, что я их‐таки допишу до сколько‐нибудь приличного состояния
Так vim_prj не мешает вам запускать хоть сотню раз Vim в некотором каталоге, главное чтоб в нем не было проектного .vim. Или вам нужно именно сотню раз запустить Vim в одном из проектов?Да, именно в проектном каталоге. Я же ясно написал, что из одного терминала я запускаю и git, и Vim для тестов.
Может стоит таки дописать плагины, а не подключать кучу недописанного и удивляться, что Vim как то не очень работает? )Покажите, где я удивлялся? У меня всё нормально работает. Но если бы не такая привычка, то некоторые ошибки я бы пропускал в релиз точно.
Да, именно в проектном каталоге. Я же ясно написал, что из одного терминала я запускаю и git, и Vim для тестов.
Покажите, где я удивлялся?
Ок, вам понравится, если функцию автозагрузки сессии можно будет отключить?Её же и так можно. Просто сделайте команду «загрузить сессию и установить автокоманду для её сохранения».
«Проект» — это дополнение для Vim. При чём тут /var/www/work/ok?
Просто сделайте команду «загрузить сессию и установить автокоманду для её сохранения».
let g:vim_prj#options = {'savesession': 1, 'loadsession': 0}
silent!? Особенно с восклицательным знаком и перед so…session.vim. Перемещает ошибки из разряда «увидел — исправил» (или, хотя бы, удалил файл с сессией) в разряд «чё это за х*ня и как её исправить» (хотя, скорее, «vim_prj незаметно потерял буфер с документацией, удалю‐ка я его»: мне сложно представить более критичные ошибки в файле сессии)?Перемещает ошибки из разряда «увидел — исправил» в разряд «чё это за х*ня и как её исправить»
Кстати, s:File.slash практически во всех случаях абсолютно бесполезная вещь
И ещё: это совершенно не дело игнорировать пользовательскую настройку &sessionoptions. Особенно отсутствие в списке globals: некоторые дополнения явно сделали свои настройки сохраняемыми в таком виде
http://example.com (т.е. открываемый с помощью BufRead* команд, не присутствующий в файловой системе). Больше ничего в голову не приходит.getcwd() != $HOME. Сравнение строк с помощью операторов [!=<>]=, is(not)? и [<>] делать нельзя никогда, потому что результат сравнения, за некоторыми исключениями, непредсказуем на этапе написания кода: результат использования всех указанных операторов зависит от значения пользовательской настройки ignorecase. «Безопасные» версии — это те же операторы, но с суффиксом # (регистр не игнорируется) или ? (регистр игнорируется). Я лично использую всегдаempty вместо сравнения с пустой строкой.is# или isnot# для сравнения строки со строкой0 ==# "abc", но 0 isnot# "abc". Во‐вторых, [] !=# "abc" — ошибка, [] isnot# "abc" — 1. Первая часть позволяет использовать 0 в ряде случаев вместо отсутствующего значения None. Вторая часть иногда нужна для типов вроде enum {Ignore, Raise, Callback(fn())} (пример показывает тип для выбора между двумя стандартными действиями и вызовом своей функции).*map/*menu/*abbrev (нужно *nore*, можно ещё добавить <special>, если кого‐то волнуют странные люди в совместимом режиме (set compatible)), normal (нужен восклицательный знак), match*(string, 'regexp') (нужна \c или \C внутри регулярного выражения, это очень характерно практически для всех функций, принимающих регулярные выражения), command (за очень редкими исключениями нужно добавлять -bar), …
Vim по полной: Уровень проекта и файловая система