Comment sélectionner tout le texte dans Vi / Vim?

193

Utiliser l'outil VI pour éditer les fichiers de configuration.

Comment sélectionner tout le texte d'un fichier (environ 1000 lignes), le copier, puis le coller dans Google Docs?

Tarun Gupta
la source

Réponses:

159

Le moyen le plus simple et le plus rapide consiste à utiliser: : % y +et ensuite passer à Google Docs (ou ailleurs) et coller. Explication:

  • % faire référence à la commande suivante pour travailler sur toutes les lignes
  • y  tirer ces lignes
  • +  copier dans le presse-papiers du système

Une autre solution consiste à g g " + y Gadmettre que ce qui précède est plus rapide et plus simple.

Tuxmentat
la source
10
@Tuxmentat pouvez-vous s'il vous plaît expliquer ce que chaque touche fait en:%y+
Jas
10
Cette réponse serait meilleure si elle expliquait ce que chaque touche fait pour les deux séquences.
DemandeAnyway
6
Ma meilleure supposition: le ':' signifie que nous utilisons une commande "ex mode" (je pense). De toute façon, c'est une commande. '%' est un spécificateur spécial de plage de ligne de commande qui spécifie le fichier entier. 'y' tire tout et '+' spécifie le registre du presse - papier . : help <command> m'a aidé à comprendre cela.
Hawkeye Parker
11
je dois faire quelque chose de mal. je tape :%y+, et je reçoisE488: Trailing characters
johny pourquoi
25
Je reçois "E850: Nom du registre invalide". La deuxième méthode fonctionnait bien pour la copie, mais n'atteignait pas le presse-papier du système sous Ubuntu 16.04 (du moins pour moi --- j'ai un fichier .vimrc qui peut affecter les choses).
EntangledLoops
95

Beaucoup de réponses données ont également effacé la sélection, ce que je ne cherchais pas.

J'utilise ggVGà cet effet (doit être exécuté en mode normal). Cette commande ne sélectionne que le texte entier dans le document.

J'ai même remappé Ctrl+Aà cette fin, car je n'ai pas vraiment besoin d'incrémenter un entier avec le raccourci ( Ctrl+Acarte par défaut ).

Ajoutez simplement ceci dans votre .vimrc:

map <C-a> <esc>ggVG<CR>

Il doit d’ <esc>abord s’assurer que l’utilisateur est en mode normal.

Arda
la source
2
Exactement ce que je cherchais, et ça fait plaisir de voir que Ctrl + A n'est pas occupé par défaut dans vim. J'espère qu'il n'y a pas d'effets secondaires.
Nikos Alexandris
2
Personnellement ggVG, je l'utilise , mais cela gg0vG$pourrait être plus approprié car cela reproduit plus étroitement l'opération Ctrl + A 'normale'.
Sheharyar
39

Vous pouvez utiliser cat file, puis sélectionner la sortie et copier / coller si vous avez besoin de la coller dans votre navigateur.

Pour vi voici comment vous pouvez sélectionner tout le texte et l’écrire dans un nouveau fichier:

shift v  -- visual mode
shift g -- jump to eof
"*y -- yank select text
:e my_new_file -- create a new file
"*p -- paste into a new file

En théorie, cela devrait fonctionner à la fois sous Linux et Windows - je l’ai essayé sur un Mac mais cela ne fonctionne pas.

Silviud
la source
1
Coller dans le navigateur Web cat fileest la voie à suivre. La shift vméthode ne copie que dans le tampon interne de Vi.
Aleksandr Levchuk
pas si vous utilisez le presse-papiers du système qui utilise le * registre - mais cela ne fonctionne que sur X et j'ai entendu sur Windows - donc si vous utilisez ssh, vous avez besoin de -X - pour vérifier si vim prend en charge vim -: set clipboard + = sans nom
Existe-t-il une autre solution pour ce faire sans créer un nouveau fichier? Si nous modifions en direct sur le serveur, nous devons conserver le code de sauvegarde sur la machine locale afin de pouvoir revenir en arrière.
NJInamdar
+1 pour chat et sélectionnez en mastic. Bien sûr, cela ne fonctionnera pas pour des fichiers volumineux et n’est pas la méthode la plus conviviale. Mais pour copier de petits fichiers de script, ce qui sort de la fenêtre d'affichage suffit.
Arnis Juraga
16

UTILISEZ ggVG. tapez "gg" pour aller en haut du test, puis tapez VG.

utilisateur402791
la source
8

J'utilise Vim 7.4 dans l'environnement CentOS-7. Ce qui m'a fonctionné pour sélectionner tout le texte est

:%y

Ensuite, juste pdans le fichier suivant où je veux une copie complète.

Ou

Vous pouvez utiliser la commande chat.

cat copyfile > pastefile

Ce dépôt git a aussi d’autres commandes utiles.

Sachith
la source
7

gg"+yG

ou

gg"*yG

selon que + ou * est le presse-papiers du système. (Sur de nombreux unix, + est le tampon de sélection de la souris pour un clic du milieu et * est le presse-papiers du système).

frabjous
la source
1
Je pense que c'est l'inverse: "* est la sélection et" + est le presse-papiers. vimdoc.sourceforge.net/htmldoc/gui_x11.html#x11-selection
Mikel
Vous avez raison. Je le savais aussi, mais j'ai tapé la mauvaise chose. ☹
frabjous
3

Pour un Mac, utilisez pbcopy (copier-coller):

cat file.txt | pbcopy

Le contenu de fichier.txt se trouve maintenant dans le presse-papier pour pouvoir être collé dans une autre application (par exemple, un navigateur).

Vous pouvez également coller le contenu du presse-papiers dans un fichier à l'aide de pbpaste:

pbpaste > file.txt

Bien que cela ne concerne pas spécifiquement vi, il atteint le même objectif sur un Mac.

Chris
la source
1

Si vous utilisez un bureau Linux, vous pouvez le charger dans le presse-papiers en utilisant xclip ou xsel. Pour quelque chose de cette taille, vous voudrez peut-être simplement utiliser la fonctionnalité de téléchargement de Google Documents.

Cakemox
la source
1

Une autre façon serait:

Vous appuyez vsur la touche de votre clavier et réglez VIM sur VISUAL

Puis sélectionnez tout le texte en faisant défiler

^+ INSERTcopier

SHIFT+ INSERTpour coller le texte où vous voulez sur Google Docs.

utilisateur237678
la source
0

Utilisez la commande suivante.

cat <your file name>

Cela fera écho au contenu du fichier. Maintenant, sélectionnez, faites défiler, copiez, collez.
Jeu terminé

Ex.:

cat bobis.txt
utilisateur359247
la source