Forum Programmation.shell [RESOLU] copier depuis Vim vers Writer

Posté par  . Licence CC By‑SA.
Étiquettes :
1
11
avr.
2018

Bonjour,

J'ai enfin réussi à coller depuis OfficeWriter (ctrl+c) vers Vim (ctrl+maj+v).
Mais impossible de trouver comment faire l'inverse : copier du texte depuis Vim vers OfficeWriter.

On aurait pu s'attendre à maj+ctrl+c dans Vim puis ctrl+v dans Writer, mais non :(

Je précise qu'il s'agit d'une machine virtuelle Slackware installée dans Mint et que le presse-papier bidirectionnel fonctionne.

Merci d'avance pour votre aide.

  • # la souris

    Posté par  (site web personnel) . Évalué à 1.

    Click droit + copier

    • [^] # Re: la souris

      Posté par  . Évalué à 2.

      Merci pour ta réponse, c'est la première chose que j'avais essayée, mais le clic droit ne propose pas de menu contextuel dans mon Vim :(

  • # Dépends du terminal

    Posté par  . Évalué à 2.

    En fonction du terminal, tu peux juste utiliser la souris. Le problème dans ce cas, c'est si tu as activé la numérotation des lignes… pour la désactiver, il faut faire ":set nonu" (et ":set nu" pour réactiver).

    Sinon, en fonction du build de vim que tu utilises (ou du cas d'usage), tu seras peut-être obligée de recourir à des lignes de commandes. Par exemple, si tu as sélectionné, dans vim (avec le mode visuel) un texte, tu peux utiliser ":'<,'>w !xclip".

    • [^] # Re: Dépends du terminal

      Posté par  . Évalué à 1.

      Merci freem, voilà ce que j'ai comme résultat :

      :'<,'>w !xclip

      /bin/bash: xclip : commande introuvable
      le shell a retourné 127

      Mais curieusement j'ai accès au clic droit pour copier cette réponse du shell, et uniquement pour cela ! si je tapes du texte sur la même page plus haut, le clic droit ne donne toujours rien.

      Je n'y comprends pas grand chose, c'est pourquoi je poste dans Débutants, merci d'avoir de la patience avec moi ^

      • [^] # Re: Dépends du terminal

        Posté par  . Évalué à 3.

        /bin/bash: xclip : commande introuvable

        xclip est un outil en ligne de commande qui permets de manipuler les presse-papier. Je pensais qu'il était installé par défaut, manifestement je me suis trompé.

        Mais curieusement j'ai accès au clic droit pour copier cette réponse du shell, et uniquement pour cela ! si je tapes du texte sur la même page plus haut, le clic droit ne donne toujours rien.

        Si je découpe la commande vim (1):

        • '<,'> => indique la zone à laquelle s'applique le reste de la commande. Ici, il s'agit de la zone sélectionnée par le mode visuel;
        • w => indique que l'on veut écrire le contenu de la zone (ou la totalité du buffer si rien n'est précisé) vers un fichier;
        • ! => indique que l'on va exécuter une commande du shell, dans notre cas, xclip (qui, par défaut, envoie ce qu'il a sur son entrée standard dans le presse papier que l'on utilise habituellement en sélectionnant pour copier, et en faisant un clic milieu pour coller).

        Donc, on envoie la zone du mode visuel dans la commande du shell xclip.

        merci d'avoir de la patience avec moi

        On a tous été débutant, et on a tous eu de l'aide des autres. Dans mon cas, j'ai encore régulièrement de l'aide des autres :)

        1: Pour être honnête, je l'ai découverte pour te répondre, d'habitude je désactive les numéros de ligne et j'utilise la souris… je trouvais ça chiant, j'ai saisi l'occasion de chercher.

        • [^] # Re: Dépends du terminal

          Posté par  . Évalué à 1.

          Merci pour le découpage de la commande, c'est sympa d'expliquer :)

          J'ai trouvé un paquet misc/xclip command-line interface for the X Clipboard, disponible sur le portail SlackBuilds.org ça devrait aller.

          Bonne journée.

  • # :help quoteplus

    Posté par  (site web personnel) . Évalué à 5. Dernière modification le 11 avril 2018 à 10:46.

    Tu peux copier dans le presse papier système en utilisant le registre "+:

    Sélectionne donc tes lignes en mode visuel avec vim, puis copie le texte sélectionné dans le presse papier avec "+y. Tu devrais ensuite pouvoir faire un Ctrl+v dans Writer.

    De même tu as aussi le registre "* qui a un rapport avec le presse papier pour coller avec la molette. Sélectionne ton texte en mode visuel, ou avec la souris, puis fais un clic molette pour coller. Voir :help quotestar et :help clipboard.

    • [^] # Re: :help quoteplus

      Posté par  (site web personnel) . Évalué à 2.

      Ah, et pour coller de Writer vers Vim:

      1. Ctrl+c dans Writer
      2. :set paste dans vim
      3. "+p là où tu veux coller
      4. :set nopaste

      Le set paste/nopaste est facultatif mais évite que Vim tente de changer le formattage/indentation et sans doute aussi les abbréviations, car si l'option paste n'est pas active, il interprète le texte entré comme si tu l'avais tapé au clavier.

      • [^] # Re: :help quoteplus

        Posté par  (site web personnel) . Évalué à 4.

        Tu peux te faire un raccourci pour réunir les commandes 2, 3, 4 si tu fais cela souvent (voir plus bas "Vim Script The Hard Way" si tu n'as jamais fait ça).

        Si tu veux aller plus loin avec Vim, je te conseille:

        Ces ressources sont des mines d'informations, et m'ont vraiment fait progresser dans mon utilisation qutidienne de Vim.

        • [^] # Re: :help quoteplus

          Posté par  . Évalué à 1.

          Merci beaucoup pour ces liens.
          J'ai "pratiqué" le vimtutor mais apparemment, ça ne m'a pas suffit :)

          Mes réponses à tes deux précédents messages ne se sont pas insérées où je voulais.

          • [^] # Re: :help quoteplus

            Posté par  (site web personnel) . Évalué à 6.

            vimtutor ne fait que gratter la surface. C'est assez pour débuter mais c'est le minimum syndical.

            Je te conseille de t'imprimer une antisèche rappelant les fonctionnalités les plus utiles:
            Vim Cheat Sheet

      • [^] # Re: :help quoteplus

        Posté par  . Évalué à 1.

        Merci liberforce mais ça je sais faire, voir mon premier message :

        J'ai enfin réussi à coller depuis OfficeWriter (ctrl+c) vers Vim (ctrl+maj+v).

        • [^] # Re: :help quoteplus

          Posté par  . Évalué à 1.

          arfff, je vais avoir du mal avec ces liens, je ne suis pas anglophone, quel handicap…

          • [^] # Re: :help quoteplus

            Posté par  (site web personnel) . Évalué à 2.

            Il va falloir t'y mettre un minimum, parce que vim fait en sorte que les déplacements et les actions aient une logique qui forment une phrase. Par exemple:

            • daw → Delete a word = efface un mot (le 'a' inclut l'espace suivant)
            • yap → Yank a paragraph = copie un paragraphe
            • ciw → Change inner word = change le mot à l'intérieur duquel se trouve le curseur (ne mange donc pas l'espace suivant)
            • [^] # Re: :help quoteplus

              Posté par  . Évalué à 1.

              Merci pour l'antisèche liberforce, l'image est enregistrée, plus qu'à l'imprimer ;)

              En effet, ça serait bien pratique de pouvoir se rappeler ces mots qui forment une phrase.
              Pas faute de me mettre à l'anglais pourtant : j'utilise une appli sur mon smartphone depuis des années, mais c'est laborieux …

              Bonne journée

    • [^] # Re: :help quoteplus

      Posté par  . Évalué à 1.

      Bonjour liberforce,
      Ça ne fonctionne hélas pas chez moi.

    • [^] # Re: :help quoteplus

      Posté par  . Évalué à 2.

      Tes diverses astuces ne fonctionnent pas chez moi, mais je pense savoir pourquoi: j'utilise le paquet "vim" de Debian, qui, je cite:

      ne fournit pas d'interface graphique

      Après installation d'un paquet avec support d'interface graphique (ainsi qu'une bonne 10aine de dépendances supplémentaires dues à ruby), tes commandes fonctionnent parfaitement. Enfin, je n'ai testée que celle-ci, mais je ne doute pas une seconde que ce soit valable pour les autres :)

      • [^] # Re: :help quoteplus

        Posté par  (site web personnel) . Évalué à 2.

        Ah, effectivement, j'ai le paquet vim-gnome installé. Je n'utilise pas gvim, mais avoir cette version là permet d'avoir un vim compilé avec la gestion du presse-papier.

        Mon vim pointe vers vim.gnome. La commande suivante permet de s'assurer que les fonctionnalités clipboard et xterm_clipboard sont bien activées (= précédées d'un +):

        $ /usr/bin/vim.gnome --version | grep clipboard
        +clipboard       +iconv           +path_extra      +toolbar
        +eval            +mouse_dec       +startuptime     +xterm_clipboard
        

        Le paquet vim-gtk est suffisant aussi.

        $ /usr/bin/vim.gtk --version | grep clipboard
        +clipboard       +iconv           +path_extra      +toolbar
        +eval            +mouse_dec       +startuptime     +xterm_clipboard
        

        En revanche, les autres versions de vim n'ont pas la gestion du presse-papier (fonctionnalités précédées d'un - = désactivées):

        $ /usr/bin/vim.tiny --version | grep clipboard
        -clipboard       +iconv           -perl            -vertsplit
        -ebcdic          -mouse           -startuptime     -xterm_clipboard
        
        $ /usr/bin/vim.basic --version | grep clipboard
        -clipboard       +iconv           +path_extra      -toolbar
        +eval            +mouse_dec       +startuptime     -xterm_clipboard
        
        • [^] # Re: :help quoteplus

          Posté par  . Évalué à 1.

          Re,

          Mon vim n'affiche pas sa version, mais en effet pas de gestion du presse-papier.

          [root@slackbox:bin] # /usr/bin/vim --version | grep clipboard
          -clipboard +insert_expand +path_extra -toolbar
          +eval +mouse_dec +statusline -xterm_clipboard

          Pourtant ctrl+maj+v colle le contenu du presse-papier standard (texte depuis Writer ou autre) dans Vim. Il y accède donc bien pour récupérer du contenu, mais n'est pas capable d'en envoyer.

          Encore merci pour les infos.

          • [^] # Re: :help quoteplus

            Posté par  . Évalué à 2.

            Ce n'est pas vim qui récupère les informations du presse papier, mais l'émulateur de terminal que tu utilises. Vim est, à la base, un outil qui s'utilise en console, pas avec une session graphique, donc pour l'utiliser dans une session graphique, on passe par un émulateur de terminal, dans mon cas urxvt, mais il en existe des dizaines d'autres.

            • [^] # Re: :help quoteplus

              Posté par  . Évalué à 1.

              Ok ;)
              L'article est très intéressant, merci de me l'avoir indiqué.

        • [^] # Re: :help quoteplus

          Posté par  . Évalué à 2.

          Je suis longue à la détente, je viens seulement de tilter sur cette phrase :

          Je n'utilise pas gvim, mais avoir cette version là permet d'avoir un vim compilé avec la gestion du presse-papier.

          Il me semblait avoir lu que gvim était installé par défaut dans Slackware, je l'ai cherché depuis le menu en mode graphique, trouvé et affiché VI Improved.
          Me suis rendu compte que ça n'est pas celui que j'utilise habituellement.
          J'ai donc tenté la manip que tu donnes plus haut : "+y et là ça fonctionne !!

          Habituellement, je l'invoquais depuis le terminal Xfce de cette façon : vim /repertoire/fichier
          Et c'est cette fenêtre s'ouvrait, sans gestion du presse-papier :

          Titre de l'image

          L'ouverture de vim depuis l'interface graphique, avec gestion du presse-papier :

          Titre de l'image

          C'est pas demain la veille que je serai à l'aise avec un système Linux moi…

          • [^] # Re: :help quoteplus

            Posté par  (site web personnel) . Évalué à 2. Dernière modification le 12 avril 2018 à 15:14.

            Comme dit plus haut, tu as des distributions comme Debian, Ubuntu, Mageia, qui te permettent d'avoir plusieurs versions de vim installées en parallèle. Il y a peut être une version qui gère le presse papier dans slackware, pour que tu ne sois pas obligée d'utiliser gvim si tu ne le souhaites pas, mais je ne sais pas quel paquet tu devrais installer.

            En revanche en cherchant un peu, il semble possible de lancer gvim sans le mode visuel, pour avoir un vim dans ton terminal comme tu en as l'habitude. Pour essayer, lance gvim -v dans ton terminal. Si tu as un vim qui se lance sans l'interface déportée de gvim, alors ça marche ;). Il ne te rester plus qu'à rajouter un alias: alias vim='gvim -v'

            Si dans ton ~/.bashrc tu as quelque chose comme ça:

            if [ -f ~/.bash_aliases ]; then
                . ~/.bash_aliases
            fi
            

            alors rajoute l'alias à la fin de ton ~/.bash_aliases. Dans le cas contraire, rajoute le à la fin de ton ~/.bashrc. Ferme ensuite ton terminal, rouvre le, et si tu tapes vim, tu devrais te retrouver dans un vim en mode texte géré par gvim (et qui donc gère le presse papier). Pour le vérifier, tape la commande suivante dans vim:

            :echo has('clipboard')
            

            Elle devrait t'afficher 1 tout en bas de l'écran, indiquant que la fonctionnalité est activée.

            • [^] # Re: :help quoteplus

              Posté par  . Évalué à 1.

              Super, j'ai bien un vim qui se lance avec gvim -v !

              Je viens de faire une recherche pour trouver le fichier ~/.bashrc qui n'est pas à sa place :

              [root@slackbox:/] # find -name bashrc
              find: "./home/lea/.gvfs": Permission non accordée
              

              C'est un répertoire .gvfs qui est trouvé à la place, et il est vide.

              Et vu que j'utilise toujours le terminal en root, si je mets un alias dans un fichier qui n'appartient pas à root, je me demande si ça va fonctionner…

              Par contre, en affichant l'aide de gvim en mode graphique, en bas de Version, il y a des indications sur d'autres emplacements :

              Titre de l'image

              Si tu arrives à distinguer ce qui est écrit*, tu peux me dire si c'est dans /usr/share/vim (vim par défaut) qu'il faut modifier un fichier pour que l'alias soit pris en compte indifféremment depuis root ou un compte utilisateur ?

              Il contient :
              - un repértoire vim74 qui contient plusieurs fichiers et dossiers
              - un répertoire vimfile
              - un fichier vimrc

              Quel est le fichier qui équivalent à bashrc ?

              Merci.

              *je recopie ici :
              fichier vimrc système : vim/vimrc
              fichier vimrc utilisateur : home/.vimrc
              2ème fichier utilisateur : ~/ .vim/vimrc
              fichier exrc utilisateur : home/ .exrc
              fichier gvimrc utilisateur : home/ .gvimrc
              2ème fichier gvimrc utilisateur : ~/ .vim/gvimrc
              fichier menu système : vimruntime/menu.vim
              vim par défaut : /usr/share/vim

              • [^] # Re: :help quoteplus

                Posté par  . Évalué à 2.

                Je viens de faire une recherche pour trouver le fichier ~/.bashrc qui n'est pas à sa place :

                [root@slackbox:/] # find -name bashrc
                find: "./home/lea/.gvfs": Permission non accordée

                Il est dit ici plusieurs choses:

                • il existe un dossier .gvfs pour lequel tu n'as pas le droit d'exécution, qui servent en fait à «ouvrir» les dossiers. La commande find ne peux donc pas aller voir dedans.
                • la commande find ne trouve pas le fichier bashrc, elle ne dit ici rien au sujet d'un fichier .bashrc. Le nom des différent.

                Si tu veux trouver le fichier .bashrc qui se trouve dans un dossier précis et pas dans les dossiers enfant, il faut utiliser la commande suivante: find $MON_DOSSIER -maxdepth 1 -name "$MON_FICHIER". $MON_DOSSIER est facultative, en cas d'absence, c'est le dossier courant qui est utilisé. $MON_FICHIER est le nom exact et complet du fichier, ce nom pouvant comporter des joker: '?' signifie n'importe quel caractère, '*' signifie n'importe quel nombre de n'importe quels caractères.

                Sinon, tu peux aussi ne pas utiliser find, et au pire créer ce fichier directement s'il n'existe pas: c'est un script d'initialisation, tout le monde peut créer ou modifier le sien à sa guise.

                Et vu que j'utilise toujours le terminal en root, si je mets un alias dans un fichier qui n'appartient pas à root, je me demande si ça va fonctionner…

                Ici aussi, plusieurs choses à dire:

                • je te conseille chaudement de limiter l'usage de root au maximum. Quitte à utiliser la commande su pour changer d'identité ponctuellement quand tu en as besoin (d'autres préféreraient sudo qui a quelques avantages, notamment le fait de pouvoir limiter les commandes utilisées à un jeu précis, mais bon sur un système mono-utilisateur je ne suis pas persuadé que ce soit utile).
                • si tu veux configurer au niveau du système, les fichiers de configuration à modifier appartiennent à root, affecteront la totalité des utilisateurs du système, et se situent dans /etc.
                • si tu veux modifier uniquement la configuration utilisée par l'utilisateur root, ce sont les «mêmes» fichiers de configuration que pour n'importe quel utilisateur: "$HOME/$FILE", ou "~$USER/$FILE". Dans le cas du fichier .bashrc, ce sera donc ~root/.bashrc qui sera probablement résolu par le shell comme étant /root/.bashrc. Je dis probablement, parce que je pense que c'est standard, mais ça peut se modifier: l'information du dossier $HOME de chaque utilisateur peut se trouver dans le fichier /etc/passwd, au 6ème champ (les ':' sont des séparateurs de champs). Ce fichier contiens la configuration du programme login pour chaque utilisateur, les mots de passe étant normallement chiffrés dans le fichier /etc/shadow.

                Enfin, si ton but est de faire un alias système, tu peux aussi regarder le contenu de la variable $PATH.
                Chez moi, ça donne ceci: /home/freem/.bin:/home/freem/.bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games. Quand le shell cherche à trouver une commande (qui ne soit pas «builtin», c'est à dire implémentée dans le shell lui-même), il cherche d'abord dans le 1er dossier, puis le 2nd, jusqu'a ce qu'il trouve ou qu'il n'y ait plus d'entrées. Donc, dans mon cas, je peux mettre mes scripts utilisateur dans ~freem/.bin, et mes scripts systèmes dans /usr/local/bin, /usr/local servant à mettre les binaires qui ne sont pas installés par le système de paquet de ma distribution.

                Bon, ça fait déjà un petit pavé, mais un certain nombre de mes explications peuvent varier d'une distribution à l'autre, c'est pour ça que j'ai essayé d'être exhaustif… ceci dit, je serais surpris de n'avoir rien oublié.
                Dans mon cas, j'utilise Debian, qui modifie un certain nombre de choses et dont la philosophie est à priori très différente de celle de slackware (qu'il faudrait que j'essaie, un jour, d'ailleurs).

                • [^] # Re: :help quoteplus

                  Posté par  . Évalué à 1. Dernière modification le 13 avril 2018 à 11:20.

                  Bonjour freem,

                  Je n'avais pas vu ton message quand j'ai posté pour libreforce.

                  J'ai enfin fini par m'en sortir :)

                  Je te remercie infiniment pour les explications, j'adore ça et il n'est pas si fréquent d'en recevoir d'aussi précises et détaillées.

                  Je vais lire tout cela très attentivement ;)

              • [^] # Re: :help quoteplus

                Posté par  . Évalué à 2.

                Va savoir pourquoi, peut-être mieux réveillée qu'hier, ce matin j'ai fini par trouver le fichier ~/.bashrc, il n'était pourtant pas très loin, donc visiblement j'ai mal utilisé la fonction de recherche…

                Le pire c'est qu'en l'ouvrant je me souviens l'avoir modifié il y a un certain temps en suivant un tuto, d'abord dans root, puis pour l'utilisateur.

                J'ai rajouté l'alias à la suite pour les 2 fichiers :

                Titre de l'image

                Et ça marche, je peux maintenant utiliser "+y depuis vim ouvert dans le terminal, pour coller le texte sélecionné dans Writer !
                :echo has('clipboard') dans vim renvoie bien 1.

                Eh bien, voilà un grand confort en plus :)
                Grâce à ton aide et je t'en remercie

                Je n'ai pas la comprenette très facile avec Linux, mais je suis persévérante, ça compense un peu ;)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.