浏览代码

Avoid unnecessary tab/window switch

Junegunn Choi 11 年之前
父节点
当前提交
da47e6ee56
共有 1 个文件被更改,包括 15 次插入9 次删除
  1. 15 9
      plug.vim

+ 15 - 9
plug.vim

@@ -506,23 +506,29 @@ function! s:switch_in()
     return 0
   endif
 
-  let s:pos = [tabpagenr(), winnr(), winsaveview()]
-  execute 'normal!' s:plug_tab.'gt'
-  let winnr = bufwinnr(s:plug_buf)
-  execute winnr 'wincmd w'
+  if winbufnr(0) != s:plug_buf
+    let s:pos = [tabpagenr(), winnr(), winsaveview()]
+    execute 'normal!' s:plug_tab.'gt'
+    let winnr = bufwinnr(s:plug_buf)
+    execute winnr.'wincmd w'
+    call add(s:pos, winsaveview())
+  else
+    let s:pos = [winsaveview()]
+  endif
 
-  call add(s:pos, winsaveview())
   setlocal modifiable
   return 1
 endfunction
 
 function! s:switch_out()
-  call winrestview(s:pos[3])
+  call winrestview(s:pos[-1])
   setlocal nomodifiable
 
-  execute 'normal!' s:pos[0].'gt'
-  execute s:pos[1] 'wincmd w'
-  call winrestview(s:pos[2])
+  if len(s:pos) > 1
+    execute 'normal!' s:pos[0].'gt'
+    execute s:pos[1] 'wincmd w'
+    call winrestview(s:pos[2])
+  endif
 endfunction
 
 function! s:prepare()