Comment faire en sorte que vim conserve la position du curseur lors de l'ouverture d'un fractionnement


2

Lorsque j'ouvre une division verticale dans vim, il prend ma ligne actuelle et la place en haut de la mémoire tampon (défilement du fichier entier vers le haut). Comment puis-je faire en sorte que vim conserve sa position actuelle?


Quelle commande ou clé utilisez-vous exactement? Je me demande parce que les deux Ctrl-W-Vtouches et :vsplitne déplacent pas le curseur pour moi.
xaizek

Avez-vous modifié votre _vimrc de quelque manière que ce soit?
EBGreen

Voici mon vimrc: gist.github.com/1bf9c5228c74cbb2ed1d J'utilise ctl + w, v pour ouvrir la scission, mais: vsplit présente également ce comportement.
cmhobbs

Je n'ai rien vu de probable dans votre .vimrc. C'est probablement l'un de vos plugins. Vous pouvez essayer de démarrer vim en tant vim -N -u NONEque voir si le problème disparaît. Étant donné :vsplitque le problème est aussi à l'origine, il s'agit probablement d'une autocommande plutôt que d'un mappage. Vous pouvez essayer :au! filetypedetect(pour vous débarrasser de ce groupe et rendre le reste plus facile à voir) suivi :aude la liste de toutes les autocommandes et voir si certaines semblent suspectes.
garyjohn

Il présente le même comportement lors de l'exécution de vim -N -u NONE. Le seul plugin que j'ai est bufferlist. Je suis allé jusqu'à l'enlever en vain. Notez que cela se produit sous Debian et OSX 10.8.
cmhobbs

Réponses:


1

EDIT: REAL REPONSE : voir https://stackoverflow.com/questions/9625028/vim-buffer-position-change-on-window-split-annoyance

TLDR : Ce comportement ne se produit que la première fois qu'une nouvelle fenêtre est créée. Si vous fermez la fenêtre et recommencez, le curseur dans le nouveau tampon est le même que dans l'ancien tampon. La solution consistait à faire quelque chose d’inutile en ouvrant puis en fermant une fenêtre, puis en effectuant votre division verticale.

Voici un autre .vimrcmappage qui enveloppe la réponse de stackoverflow pour le faire pour vous:

map <C-S-O> :tabnew<CR>bwipeout<CR>:vs<CR>

Ainsi, lorsque vous appuyez sur ctrl-shift-o, un nouvel onglet vide s'ouvre ( :tabnew<CR>), supprimez le tampon ( :bwipeout<CR>), puis effectuez votre division verticale ( :vs<CR>).

J'espère que cela va mieux - fonctionne parfaitement pour moi. Merci de me donner envie de trouver quelque chose d’utile pour contourner ce comportement ennuyeux!


Cela arrive tout le temps pour moi! Je suis récemment venu avec une réponse qui fonctionne la plupart du temps (mieux que rien cependant). Mettez ceci dans votre .vimrc:

map <C-S-O> mmH:vs<CR>`m<C-W>l`m<C-W>h

Chaque fois que vous appuyez sur ctrl+shift+ocette touche , faites une division verticale et placez le curseur sur la même ligne et la même colonne que vous l'aviez dans la mémoire tampon d'origine avant la division.

Le problème vimest que le tampon que vous éditez est plus grand que ce qui peut être affiché actuellement. Selon l'endroit où se trouve le curseur dans la mémoire tampon (exactement au milieu, dans la moitié supérieure et dans la moitié inférieure), une fois que vous effectuez une :vsdivision verticale, le nouveau tampon défilera vers le bas ou vers le haut jusqu'à ce qu'il pense le mieux.

La .vimrccartographie ci-dessus est en train de faire:

map <C-S-O>                                     map ctrl-shift-o to run this

            mm                                  mark the current cursor position

              H                                 move the cursor to the top of
                                                the buffer

               :vs<CR>                          do a vertical split

                      `m                        move to line and column of mark

                        <C-W>l                  move focus to the right to the
                                                original buffer

                              `m                move the cursor in the orig buffer
                                                back to the marked position

                                <C-W>h          move back to the new buffer on
                                                the left

Encore une fois, cela fonctionne la plupart du temps pour moi, sans savoir pourquoi cela ne fonctionne pas tout le temps. En tout cas, espérons que cela a aidé certains


En fait, "définir splitright" à partir des commentaires de l'article accepté que vous avez lié a résolu le problème, mais l'ensemble du fil de discussion était très perspicace. Accepter parce que la solution liée a résolu mon problème.
cmhobbs

0

Cela peut se produire parce que vous avez de longues lignes qui se regroupent en raison de la division verticale. Si vous :set nowrapet :vspvous remarquerez que cela ne se produit pas.


Le paramétrage de nowrap ne semble pas du tout l’affecter. Même si j'ai un tampon avec des lignes assez courtes pour ne pas encapsuler avec la scission, mon curseur passe toujours en haut de l'écran.
cmhobbs

Hm, eh bien, je ne peux pas reproduire cela. De quelle version de vim s'agit-il?
Conner

VIM - Vi IMproved 7.2 (9 août 2008, compilé le 5 avril 2012 10:17:30) Corrections incluses: 1-411
cmhobbs
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.