VIM запрашивает переменную при запуске макроса? - PullRequest
4 голосов
/ 19 октября 2010

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

Я бы хотел, чтобы он запрашивал строковое значение, чтобы я мог нажать на ярлык, затем ввести, например, "foo", и мой макрос сохранил сеанс в .foo (поэтому мне также нужно сделать базовая строка конкат на нем). Затем я сделал бы то же самое для макроса загрузки и управления сессиями по темам (используя MVC-фреймворк, у вас, как правило, было много файлов для работы).

" Control-S to save and Shift F5 to load
set sessionoptions=tabpages,winpos
map <S-F5> :source ~/.vim/.session<cr>
map <c-s> :mksession! ~/.vim/.session<cr>\| :echo "Session saved."<CR>

У меня очень мало опыта написания сценариев VIM. Возможно ли сделать это в одном вкладыше или, возможно, небольшой функцией?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 19 октября 2010
map <s-f5> :execute "source ".input("session name: ", "~/.vim/session.", "file")<cr>

Введите «foo» для загрузки «session.foo».

Вместо этого вы также можете сделать:

map <s-f5> :source ~/.vim/session.

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

Однако я бы посмотрел на вызов функции или чего-то еще полностью об этомточка.

0 голосов
/ 20 октября 2010

Вот фрагмент, который у меня есть сейчас, на случай, если кому-то понадобится что-то подобное (не нужно голосовать). Он сохраняет сессии под .session.xyz, которые также исключены из моего проекта Git. Мне нравится хранить их в папке проекта Git, чтобы они сохранялись с резервными копиями.

Мне также нравится эхо подтверждения, потому что когда вы нажимаете ввод после сохранения сеанса, в противном случае вы не видите, что что-то произошло. Это просто для обратной связи.

 map <S-F5> :execute "source ".input("Load session: ", "~/Some/Project/.session.", "file")<cr>
 map <c-s> :execute "mksession! ".input("Save session: ", "~/Some/Project/.session.", "file")\| :echo "Session saved."<CR>

Заполнение файла делает это очень удобным, спасибо!

...