2013-11-10 2 views
1

Я хотел бы иметь возможность вернуться к сеансу терминала во время редактирования в vim (используя :sh), cd в другой каталог, а затем открыть другой файл, но в том же сеансе vim я был прежде, чем. то есть, если i 'exit' в терминале, я хотел бы вернуться к vim, так что :ls показывает оба буфера.Vim открыть файл после: sh

В настоящее время, если я :sh, vim newfile, я вхожу в vim, но :ls показывает только новый файл.

Есть ли способ добавить новый файл в предыдущий сеанс вместо того, чтобы начинать новый?

(Примечание: я не слишком знаком с терминологией vim. Под «сессией» я подразумеваю экземпляр vim, который имеет мои предыдущие буферы).

+1

Возникает вопрос: почему? Вы можете открывать новые файлы из Vim с помощью:: e' и друзей. – glts

+0

Я просто подумал, что было бы здорово это сделать. Я не нахожу: это удобно даже при завершении табуляции, так как вам нужно оставаться в каждом файле по одному за раз. Оболочка хотя бы позволяет мне перечислить файлы/dirs. Поэтому вместо этого я предпочитаю использовать Nerdtree.Но, когда мне приходится открывать файлы, вложенные в одно слишком много субдирелей, у меня заканчивается комната на боковой панели Nerdtree (поэтому я открываю ее на весь экран и открываю файл на новой вкладке - тогда я тоже получаю много вкладок). Чем больше я знаю, как сделать что-то лучшее, потому что я могу добавить плюсы и решить, что лучше для меня в данной ситуации. – justin

+1

': установите wildmode = list: longest' на помощь! Vim может это сделать. См. ': H 'wildmode''. – glts

ответ

4

Вам не нужно, чтобы вернуться к раковине, чтобы открыть другие файлы: :edit, :split, :vsplit, :tabedit все позволяет редактировать файлы из любого места на жестком диске (и табуляции завершения):

:sp ../../path/to/file 

Вы можете играть с wildmenu, wildmode и wildignorecase вариантов, чтобы сделать его еще лучше.

Вы также можете использовать встроенные в Netrw плагина для навигации по вашей файловой системе с немного более удобным «графическим» исследователем (см :help netrw):

:Ex 
:Tex /path/to/ 

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

+0

Вы делаете хорошую точку в конце romainl. Значит, тогда нет способа сделать это? Если это так, я пойду дальше и приму ваш ответ. Кстати, я никогда не использовал/не смотрел в Netrw, но я использую Nerdtree, который, я полагаю, схож. Правда, это альтернатива, но я все равно хотел бы знать, могу ли я делать то, что я изначально имел в виду. – justin

+0

Возможно, есть способ сделать то, что вы хотите (возможно, с предложением Инно), но я могу себе представить, что он как свернутый, многословный, так и хрупкий. И не стоит хлопот, на мой взгляд. – romainl

+0

Хорошо, я согласен с тем, что моя фантазия не поддерживается: P Я просто подумал, что не удивлюсь, если у vim есть способ сделать что-то подобное, и это, вероятно, было глубоко погружено в документацию. Так хорошо, это не поддерживается, и есть способы обойти это. Спасибо за ваше время. – justin

2

вы можете использовать :tabedit filename, чем gt tp двигаться двигаться, хотя вкладки.

также CNTL + г ставит Vim в тэ фоне, и вы можете использовать оболочку как обычно. вернуть vim. используйте команду fg

+0

Мне известно о некоторых способах открытия новых файлов в режиме vim. Я хотел бы: sh, а затем открыть файл на моей «старой» сессии vim. Если есть способ сделать это, используя C^Z вместо: sh, это было бы хорошо знать. – justin

3

Когда вы заходите в подоболочку с :sh, а затем вызываете Vim, это будет новый экземпляр. Что вы можете сделать вместо этого запустить оригинальную Vim с клиент-серверной связи:

$ vim --servername main 

К сожалению, когда вы идете в субоболочке с :sh, оригинальный Vim приостанавливается, и вы не можете общаться с ним. Вы должны создать другую оболочку, например. в другом терминале или экран сплит. Теперь, если вы хотите редактировать другой файл в исходном Vim, используйте клиент-сервер связи Vim в, чтобы открыть его там:

$ vim --servername main --remove newfile.txt 
+0

Спасибо за объяснение и предложение. К сожалению, это не работает для меня ... Я предполагаю, потому что мне удалось каким-то образом скомпилировать vim с очень небольшими дополнительными функциями. 'vim -version | grep server' дает мне '-clientserver', поэтому я полагаю, поэтому я не могу этого сделать. Я намерен лучше рассмотреть возможность компиляции vim с большим количеством функций после форматирования/выделения некоторого времени. Спасибо за предложение. – justin

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