Par exemple, si j'ai quatre lignes comme suit:
la première ligne
la deuxième ligne
la troisième ligne
la quatrième ligne
Je veux les inverser
la quatrième ligne
la troisième ligne
la deuxième ligne
la première ligne
Comment pourrais-je faire cela dans Vim?
vim
editing
text-editors
text-editing
Jichao
la source
la source
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254Réponses:
Pour inverser toutes les lignes d'un fichier,
Pour une explication voir
qui montre également comment inverser une plage de lignes.
la source
ma
), 2. déplacez le curseur sur la première ligne du bloc, 3. tapez:'a,.g/^/m 'a
Sélectionnez les lignes souhaitées, appuyez sur
!
, puis dans l'invite résultante, dirigez les lignestac
un à un:'<,'>!tac
. Voirman tac
pour plus de détails.la source
shift+v
pour passer en mode ligne visuelle, puisj
pour ajouter des lignes à la sélection.gvim
, aussi bien! Sinon, vous devez utiliser des numéros de ligne absolus (vous pouvez peut-être utiliser un nombre relatif, mais vous devez être prudent) avec le:g/^/m0
(ce qui est également très difficile à retenir) ... Donc, essentiellement, tac devrait être avec vim, quelle que soit la plateforme. vous êtes sur, MAIS ce n'est pas 100% vimscript, MAIS on s'en fiche: P:.,'a!tac
fonctionne avec un minimum d'effort.shift+v
, vous pouvez utiliser}
pour atteindre le paragraphe suivant ou vider un espace vertical. Aussiman tac: concatenate and print files in reverse
.Sur Mac OS X,
tac
n’existe pas, mais vous pouvez utilisertail -r
dans le même sens:Cela fonctionne également bien pour le mode visuel:
Extrait de
tail(1)
la page de manuel de:la source
alias tac='tail -r'
brew install coreutils
et utilisergtac
.Pour ceux qui sont plus à l'aise avec le mode visuel:
1. Identifiez le numéro de ligne au-dessus de la sélection que vous souhaitez inverser
:set nu
.2.
Shift-V
pour mettre en surbrillance la sélection que vous voulez inverser (mode visuel).3
:g/^/m <Line number from step 1>
..Notez qu'en mode visuel, il apparaîtra automatiquement comme
:'<,'>g/^/m <Line number>
lorsque vous tapez la commande à partir de 3.Cette commande consiste à déplacer la sélection ligne par ligne dans le numéro de ligne que vous lui avez attribué. Lorsque le deuxième élément est inséré dans le numéro de ligne indiqué, il passe au premier numéro de ligne + 1. Le troisième abaisse les premier et deuxième et ainsi de suite jusqu'à ce que toute la liste soit insérée dans le seul numéro de ligne, ce qui entraîne une liste ordonnée inverse.
la source
'<
place du numéro de ligne manuellement. Il suffit de commencer la sélection une ligne plus tôt et de l'exécuter:'<,'>g/^/m'<
.Une commande
:Rev[erse]
et des mappages facultatifs pour votrevimrc
, de sorte que vous n'avez pas à vous souvenir et à exécuter les étapes non évidentes de cette recette:(
:xmap
mappe pour le mode visuel mais pas pour la sélection, comme:help mapmode-x
conseillé pour mapper les caractères imprimables.)(Basé sur: http://tech.groups.yahoo.com/group/vim/message/34305 )
la source
:'<,'>g/^/m'<
:):-1,+1Rev
ce que vous cherchez? Sachez que vous pouvez visuellement sélectionner la plage que vous voulez inverser, par exemple:V7j:Rev
. Si cela ne répond pas à votre question, je ne l'ai pas comprise. Vous devrez donc la développer ou la reformuler pour moi.Disons que vous êtes à la ligne 3, nous avons donc une plage de 3 à 6. Il suffit de taper.
la source
:,6g/^/m2
; ou quand sur la dernière ligne de la gamme::3,g/^/m2
; et:3,6g/^/m2
fonctionne à partir de n’importe où dans le fichier.