2012-04-02 3 views
2

Кажется, что :windo оставляет мой курсор в нижнем окне.После: windo, как мне вернуть курсор туда, где он был?

Как я могу заставить его вернуться к окну и положению курсора, на котором я был, прежде чем я запустил :windo?

Я думал, mZ, то `Z будет работать. Но он просто приносит этот файл в нижнее окно, вместо того, чтобы возвращать меня туда, где я был.

Запуск 7.3.462 при Win XP.

Благодаря

ответ

1

sehe привели меня к выполнению двух mksessions, и сравниваете их.

Если бы я сделать это до :windo

let saved_winnr = winnr() 

И это после того, как:

exec saved_winnr . 'wincmd w' 

Он получает, что мне нужно.

+0

Это также ответит на проблему: http://vim.wikia.com/wiki/Windo_and_restore_current_window – shaggyaxe

2

Вы можете сохранить буфер и вид:

let saved_bufnr = bufnr("%") 
let saved_view = winsaveview() 

и использовать его, чтобы восстановить точное положение (после argdo, bufo, windo, tabdo, global или любая комбинация из них)

exec 'buffer ' . saved_bufnr 
call winrestview(saved_view) 

Примечание Это эффективно использует сантехнику, которая также лежит в основе стандартной функции :mkview, :mksession. Если вы действительно хотите, чтобы восстановить все окна/вкладки, все средства использовать только большое предложение

:mksession! /tmp/tmpsession.vim 
:# do the work 
:source /tmp/tmpsession.vim 
+0

Благодарим вас за это. Однако команда: buffer winds загружает этот файл в последнем окне. Так же, как «Z». Однако ваше предложение по предложению дало мне представление. Я тестирую его сейчас ... – shaggyaxe

+1

@shaggyaxe, если вы установите 'switchbuf = useopen, usetab', вы должны получить окно, которое уже показало, что буфер – sehe

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