tutorial mac help comandos vim

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 interfiriendo

  • Solo 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

  1. no era un error (sus expectativas sobre lo que era la nueva ventana estaban apagadas)
  2. puede solucionarlo creando otra ventana antes.

Otro fondo

  1. Las opciones splitright , splitbelow

    se puede usar para controlar (hasta cierto punto) donde aparecen ventanas recientemente creadas (divididas)

  2. 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.