2017-09-14 2 views
1

J'ai un fichier dans lequel, en voici le contenu.Pliage des lignes répétées dans vim

A A A A A A A A A. . . A Morceau de code ... A A A . . A

Je veux quelque chose comme ceci en utilisant le pliage dans vim

  • A morceau de code
  • A

2 plis sont créés par des lignes de pliage répétées. Cela devrait se faire automatiquement lorsque j'ouvrirai le fichier. Est-il possible de le faire en vimrc?

Répondre

1

Il devrait être possible à l'aide setlocal foldmethod=expr où vous pouvez écrire votre propre fonction:

setlocal foldmethod=expr 
setlocal foldexpr=CustomFold(v:lnum) 

function! CustomFold(lnum) 
    if getline(a:lnum) == getline(a:lnum-1) || getline(a:lnum) == getline(a:lnum+1) 
    return '1' 
    endif 

    return '0' 
endfunction 

Toutefois, c'est non testé et vous ne voulez pas le faire pour tous les fichiers. Mais il devrait vous pointer dans la bonne direction. Il ne serait pas aussi 100% correspondent à vos critères, mais une fois que vous avez un problème spécifique, vous pouvez toujours demander à nouveau

2

Que diriez-vous de cette :help fold-expr:

setlocal foldenable foldmethod=expr 
let &l:foldtext = 'printf("+-%s %d times: %s", v:folddashes, (v:foldend - v:foldstart + 1), getline(v:foldstart))' 
let &l:foldexpr = 'getline(v:lnum) ==# getline(v:lnum + 1) && v:lnum < line("$") ? 1 : (getline(v:lnum - 1) ==# getline(v:lnum) ? "<1" : 0)' 
+1

Je pense que ce serait une mention vaut ce que le comportement de ' == # 'est pour ce scénario. Donc, je sais que vous êtes familier avec Ingo, mais je l'ajoute pour les autres utilisateurs: '== #' est toujours sensible à la casse. Si vous ne voulez pas que vous pouvez utiliser '==?'. Utiliser un '==' normal * comme * certaines * personnes ici ont fait là-bas une réponse est généralement une mauvaise idée =). Il est sensible à la casse ou insensible selon le paramètre 'ignorecase'. –

+2

@DoktorOSwaldo Merci d'avoir ajouté cette note. En fait, je pense que '==' aurait du sens: Si l'utilisateur a ': set ic', il s'attend aussi probablement à ce que les comparaisons de plis soient insensibles à la casse. Mais je n'ai jamais utilisé ce paramètre, donc c'est une pure conjecture. –

+0

Désolé de vous déranger à nouveau, mais j'aimerais connaître votre opinion: Dans mon expérience (très limitée) personne n'utilise le paramètre 'ic', c'est pourquoi je pense que vous devriez éviter de l'utiliser. Cela semble avoir du sens ici, mais je pense que c'est plutôt donné par le fichier (type) donné. Cela dépend de ce que fait le fichier si une ligne minuscule est interprétée de la même manière qu'une ligne majuscule. Donc je pense que vous devriez le définir explicitement dans le fichier foldexpr. Quelle est votre expérience avec ce genre de choses? –