mac - vim pdf
Cambio de posición del buffer Vim en la división de la ventana(molestia) (2)
Lo probé en una máquina Windows con gvim
y pude reproducir su problema. He aquí una solución que me vimrc
a agregar los siguientes comandos a vimrc
(lo obtuve con :e $MYVIMRC
):
set splitright
function MySplit()
vsplit
execute "normal /<C-w>/<C-w>"
endfunction
nmap <C-w>v :call MySplit()<CR>
Esto realmente me está poniendo de los nervios, lo cual es extraño porque es un problema tan pequeño.
Digamos que comienzo (g) vim 7.3 (windows OR linux) sin plugins / no vimrc. Abro un archivo más largo, me desplazo hacia abajo hasta la mitad. Posiciono mi cursor en la parte inferior de la ventana principal. Abro una ventana dividida vertical (CTRL + W v).
Lo que sucede a continuación me está matando. El cursor y la línea en la que se encuentra (anteriormente en la parte inferior de la ventana original) saltan a la parte superior de la ventana. La nueva ventana a la derecha tiene la posición original donde estaba la línea en la que estaba el cursor en la ventana original.
Mi pregunta: ¿Cómo evito que vim cambie la posición del cursor de la ventana que dividí? Honestamente, no me importaría en absoluto si la posición cambiaba en la nueva ventana, pero el hecho de que la división cambie la ventana original me da ganas de arrancarme los pelos.
Solía ser completamente ignorable. Entonces me enojé un poco. Entonces lentamente comencé a molestarme mucho. Ahora está empezando a ponerme furioso. Cualquier ayuda / trucos / hacks son muy apreciados!
EDITAR: Mis opciones de compilación vim para Windows y Linux (que suceden en ambos):
Windows:
+arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
+conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs
-dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path
+find_in_path +float +folding -footer +gettext/dyn -hangul_input +iconv/dyn
+insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent
+listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape
+multi_byte +multi_lang -mzscheme -netbeans_intg -osfiletype +path_extra -perl
+persistent_undo -postscript +printer -profile -python -python3 +quickfix
+reltime +rightleft -ruby +scrollbind +signs +smartindent -sniff +startuptime
+statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white
-tcl -tgetent -termresponse +textobjects +title -toolbar +user_commands
+vertsplit +virtualedit +visual +visualextra +viminfo +vreplace +wildignore
+wildmenu +windows +writebackup -xfontset -xim -xterm_save -xpm_w32
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/_vimrc"
2nd user vimrc file: "$VIM/_vimrc"
user exrc file: "$HOME/_exrc"
2nd user exrc file: "$VIM/_exrc"
Compilation: cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 /Fo./ObjC/ /Ox /GL -DNDEBUG /Zl /MT -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_BIG /Fd./ObjC/ /Zi
Linking: link /RELEASE /nologo /subsystem:console /LTCG:STATUS oldnames.lib kernel32.lib advapi32.lib shell32.lib gdi32.lib comdlg32.lib ole32.lib uuid.lib /machine:i386 /nodefaultlib libcmt.lib user32.lib /PDB:vim.pdb -debug
Linux:
-arabic +autocmd +balloon_eval +browse +builtin_terms +byte_offset +cindent
+clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
-conceal +cryptv -cscope +cursorbind +cursorshape +dialog_con_gui +diff
+digraphs +dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi
+file_in_path +find_in_path +float +folding -footer +fork() +gettext
-hangul_input +iconv +insert_expand +jumplist -keymap -langmap +libcall
+linebreak +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname
+mouse +mouseshape -mouse_dec +mouse_gpm -mouse_jsbterm -mouse_netterm
-mouse_sysmouse +mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg
-osfiletype +path_extra -perl +persistent_undo +postscript +printer -profile
+python -python3 +quickfix +reltime -rightleft -ruby +scrollbind +signs
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
+toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo
+vreplace +wildignore +wildmenu +windows +writebackup +X11 -xfontset +xim
+xsmp_interact +xterm_clipboard -xterm_save
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
system gvimrc file: "$VIM/gvimrc"
user gvimrc file: "$HOME/.gvimrc"
system menu file: "$VIMRUNTIME/menu.vim"
fall-back for $VIM: "/usr/local/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng14 -g -O2 -D_FORTIFY_SOURCE=1
Linking: gcc -L/usr/local/lib -o vim -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lXt -lncurses -lacl -lgpm -L/usr/lib64/python2.6/config -lpython2.6 -lpthread -lutil -lm -Xlinker -export-dynamic
Puedo reproducir el comportamiento, que con su descripción (a primera vista) parece ser un error, de hecho. Pero noté las siguientes cosas:
:vert split
tiene el mismo comportamiento que ^ W v:debug ver split
(...cont
) confirmó que no había un script / autocommand obvio interfiriendoSolo ocurre en la primera división de tiempo. En otras palabras, esto es una solución alternativa: ^ W v ^ W c ^ W v
el cursor, de hecho, no se mueve en la ventana original . La ''nueva ventana'' aparece a la izquierda (que nombra la ventana original). Esto no puede mostrarse con
:echo winnr()
o similar, pero puede hacerlo más evidente haciendo, por ejemplo:vert new
lugar de:vert split
: aparece la ventana nueva y vacía en el lado izquierdo.
En lugar de esto, puedes engañar a la división para que tenga un comportamiento de "segunda división" haciendo algo "inútil" antes
:tabnew|bwipeout
Ahora, ^ W v tiene el comportamiento deseado la primera vez.
TL; DR
- no era un error (sus expectativas sobre lo que era la nueva ventana estaban apagadas)
- puede solucionarlo creando otra ventana antes.
Otro fondo
Las opciones
splitright
,splitbelow
se puede usar para controlar (hasta cierto punto) donde aparecen ventanas recientemente creadas (divididas)
La función
winrestview()
Se puede usar para restaurar explícitamente la vista exacta de una ventana. Úselo así:
:let savex=winsaveview()
savex
ahora contiene algo como{''lnum'': 1, ''leftcol'': 0, ''col'': 0, ''topfill'': 0, ''topline'': 1, ''coladd'': 0, ''skipcol'': 0, ''curswant'': 0}
describe el estado de la vista actual.(hacer cosas, como ^ W v )
:call winrestview(savex)
Obviamente, esto es mucho más flexible, pero es posible que no lo necesite.