2010-10-19 2 views
4

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

Я бы хотел, чтобы он запрашивал строковое значение, чтобы я мог нажимать свой ярлык, а затем введите, например, «foo», и сохраните мой макрос в сеансе .foo (так что мне также нужно сделать базовую строку concat на нем). Тогда я бы сделал то же самое для макроса загрузки и управлял сеансами по темам (с использованием среды 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
map <s-f5> :execute "source ".input("session name: ", "~/.vim/session.", "file")<cr> 

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

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

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

Примечание там не < кр>, так что вы завершить команду самостоятельно и нажмите Enter - идентичный набор текста, как описано выше, вплоть до завершения имен файлов ,

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

+0

Удивительный, спасибо! – 2010-10-19 16:22:28

+2

@faB Я предлагаю добавить '' файл '' в качестве третьего аргумента в 'input' в первом сопоставлении для получения завершения имени файла. – ZyX

+0

Отлично, я попробую, привет. – 2010-10-19 18:28:51

0

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

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

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> 

Файл завершен, очень удобно, спасибо!

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