Vim: insérer du texte à partir d'un fichier à la position actuelle du curseur
Pour insérer du texte à partir d'un fichier dans le courant de Vim tampon-je utiliser :r filename
pour insérer le texte sous le curseur ou :0r filename
à insérer à la première ligne.
Comment insérer le contenu d'un fichier où [Cursor] est-il situé?
Actual line with some coding [Cursor] //TODO for later version
Line below actual line ...
- Ceci est particulièrement intéressant pour les scripts vim/macros.
Vous devez vous connecter pour publier un commentaire.
Insérer un saut de ligne, de lire le fichier, puis prendre la ligne de pause...
:.-1read <file>
🙂 C'est juste commep
etP
, les deux comportements sont logiques, mais vous voulez être en mesure de le faire dans les deux sens.Cela fonctionne (insère le fichier dont le nom est à l'emplacement du curseur de document en cours):
:.-1read <file>
peut être utilisé pour placer le texte au-dessus du curseur (qui vous donnera le sentiment qu'il est placé à la position du curseur).:r <cfile>
insère sur la ligne en dessous de la ligne courante, et:.-1read <file>
insère sur la ligne au-dessus de la ligne courante. La question posée est de savoir comment insérer À la position actuelle du curseur.Je propose Ctrl-R Ctrl-O
= join(readfile('filename','b'), "\n")
Autre solution:
Éventuellement ouvrir le fichier dans une autre fenêtre, utilisez
:%yh
(h
est un registre de nom) et dans votre fichier d'origine, en mode normal d'utilisation"hp
ou"hP
ou en mode insertion, Ctrl-R Ctrl-O hPour se développer sur les accepté de répondre avec le code actuel, depuis que j'ai essayé la suggestion et ça fonctionnait bien;
Ici est un exemple de travail à insérer un petit bout de code php:
En général, la syntaxe est
Seulement de le décomposer:
nnoremap
: Je suis sur le point de définir un nouveau mappage de touches pour le mode normal<leader>php
: Je voudrais déclencher la séquence de commande lorsque cette combinaison de touches est pressée. Dans mon cas,<leader>
est,
j',php
pour déclencher la commande.Maintenant pour la commande, peu à peu:
a<CR><ESC>
: passer en mode insertion (après le curseur), insérez un saut de ligne, revenir en mode normal.:.-1read <file><CR>
: il pénètre dans le fichier souhaité sur la ligne au-dessus de la ligne courante.I<BS><ESC>
: aller au début de la ligne, supprimer le saut de ligne, retour au mode normal.j0i<BS><ESC>l
: Allez une ligne vers le bas (pour le reste de la ligne qui vous ont été initialement sur), passer à la démarrer, passer en mode insertion, supprimer le saut de ligne, retour au mode normal.l
: placez le curseur à droite du fichier collé (ce qui viens de faire la commande fonctionne plus comme la façon dont vous le souhaitez).note
Vous avez un choix à coller avant ou après le curseur. J'ai choisi cet exemple pour coller après le curseur parce que c'est la façon dont le
p
commande fonctionne habituellement à coller arracha texte. Sinon, pour coller avant le curseur, vous devez changer lea
au début de la commande jusqu'à unei
. Vous pouvez utiliser l'un de ces exclusivement, ou vous pouvez les lier à la fois différentes mais liées à des séquences de touches. Par exemple:Pourrait coller du texte avant le curseur,
et :
pourrait coller du texte après le curseur. Ou vice versa. J'ai fait "avant que le curseur est" plus facile à déclencher parce que j'utilise le plus souvent lors du collage en ligne.
autre remarque
Cette solution est surtout utile si vous êtes en train de lire à partir d'un fichier que vous prévoyez d'utiliser assez souvent qu'il valait la peine de configurer un mappage de touches pour elle (c'est à dire la lecture d'un extrait à partir d'un fichier). Ce n'est pas vraiment utile si vous voulez juste lire un fichiers aléatoires chaque fois que puisque vous n'avez pas la clé de la cartographie prêt.
Car il est très stéréotypé, je suis sûr qu'il serait possible de définir une fonction qui prendrait le nom de fichier comme argument et faire la même chose. Je n'ai jamais écrit une fonction dans vimscript mais si quelqu'un qui en sait plus se sent comme l'édition de cette réponse pour contenir la solution - je les exhorte à le faire!
Ce que vous voulez utiliser est
:.-1read <file>
(.-1
est le numéro de ligne courant moins 1).- Je utiliser la clé suivante de liaison pour insérer facilement les différents modèles que j'ai:
nnoremap <Leader>in :.-1read ~/.vim/templates/
.Remarque que quelque chose comme
nnoremap <Leader>in <Up>:read ~/.vim/templates/
sera PAS travail en position debout sur la ligne 1. C'est vraiment bizarre et probablement un bug dans Vim (je suis en utilisant 7.4.x).Lire la suite dans wikia.