Comment gérer les très longues lignes de texte (plus de 500 caractères)?

19

Pour certains formats de texte, les sauts de ligne sont importants.

Par exemple, j'utilise souvent Vim pour écrire des documents MediaWiki, où vous ne pouvez pas simplement mettre un saut de ligne n'importe où (contrairement à Markdown). Je suis donc obligé d'écrire des lignes avec beaucoup de caractères.

Cela peut conduire à des lignes longues (200+ caractères) ou même très longues (1000+ caractères). Je trouve cela très difficile à utiliser dans Vim. Par exemple, si je veux modifier quelque chose au milieu de la ligne de 1 000 caractères, je dois déplacer mon curseur 500 fois.

Cela peut être fait un peu plus rapidement avec wou /, mais c'est toujours gênant.

Y a-t-il de meilleures façons de gérer cela? De meilleures touches de mouvement? Une sorte de "faux habillage" (le texte se comporte comme si tw=80, mais pas \ndans le fichier), ou autre chose?

Martin Tournoij
la source
1
Vous pouvez également définir également display = lastline pour éviter les lignes @ blanches à la fin de l'écran.
Random832

Réponses:

21

Vous pouvez utiliser une gsérie de commandes pour vous déplacer jusqu'aux limites de la zone d'écran visible. Par exemple, g$se déplace vers le bord droit de l'écran (ce qui n'est pas nécessairement la fin de la ligne). gjdéplace le curseur d'une ligne vers le bas tel qu'il apparaît sur votre écran (qui n'est pas nécessairement une ligne logique vers le bas).

Vous pourriez peut-être relier les touches fléchées:

nnoremap <Up> gk
nnoremap <Down> gj

Ou certaines personnes se relient aussi directement ket j:

nnoremap k gk
nnoremap j gj

Pour le mode insertion, vous pouvez utiliser:

inoremap <C-k> <C-o>gk
inoremap <C-j> <C-o>gj

Ou:

inoremap <Up> <C-o>gk
inoremap <Down> <C-o>gj

De plus, si vous utilisez :set wrap, Vim encapsulera les lignes, afin que vous puissiez voir toute la ligne. Vous pouvez également utiliser set showsbreak=+pour afficher un +pour indiquer que Vim effectue un habillage.


Pour passer à des positions de colonne spécifiques, vous pouvez utiliser la |commande. Par exemple, 200|ira à la position de colonne 200.

200_success
la source
1
... et g5jsauter 5, comme d'habitude.
yo '
1
@yo 'Je pense que vous voulez dire5gj
Martin Tournoij
1
@Carpetsmoker Strange; avec la plupart des commandes, peu importe l'ordre dans lequel vous donnez les préfixes et les nombres, tant que la commande elle-même est la dernière. Ici, ce n'est pas le cas: - /
yo '
@yo ', eh bien, dans g5j, g5est vu en premier, qui passe juste au suivant 5avant d'appliquer le j. C'est pourquoi il ne peut pas faire quoi 5gj.
Shahbaz
3

Vim prend en charge le soft wrapping, juste set wrappour l'activer et il encapsulera les longues lignes au-delà de l'écran visible. Vous pouvez utiliser gj& gkpour vous déplacer vers le haut ou vers le bas respectivement sur ces lignes enveloppées.

Dhruva Sagar
la source
2

Lorsque je traite des lignes très longues, le plus gros problème concerne les longueurs de ligne différentes. Autrement dit, un déplacement vers le haut ou vers le bas près des extrémités des lignes fait défiler la fenêtre très à gauche ou à droite.

Cela peut être évité en définissant virtualedit=allce qui vous permet de déplacer le curseur dans l'espace longtemps après les fins de ligne.

superjer
la source
1

Comme d'autres l'ont dit, vous pouvez utiliser g+ quelque chose pour vous déplacer. Cependant, lorsque vous avez des lignes extrêmement longues, appuyer gjplusieurs fois pour vous déplacer vers le bas n'est pas ergonomique. J'ai les éléments suivants en mon .vimrcpour rendre cela beaucoup plus facile:

vmap <D-j> gj
vmap <D-k> gk
vmap <D-4> g$
vmap <D-6> g^
vmap <D-0> g^
nmap <D-j> gj
nmap <D-k> gk
nmap <D-4> g$
nmap <D-6> g^
nmap <D-0> g^

Sur un Mac, cela me permet d'utiliser j, k, $, 0 et ^ sur les lignes d'affichage en maintenant la touche de commande enfoncée. Sur d'autres systèmes, au lieu de Dvous, essayez Mou Apour Alt, ou Cpour Control.

janos
la source