Commandes Vim simples que vous aimeriez connaître plus tôt [fermé]
378
J'apprends constamment de nouvelles commandes dans Vim, mais je suis sûr que tout le monde apprend quelque chose de nouveau de temps en temps. Je viens d'apprendre récemment à ce sujet:
zz, zt, zb - positionne le curseur au milieu, en haut ou en bas de l'écran
Quelles sont les autres commandes utiles ou élégantes que vous aimeriez avoir apprises il y a longtemps?
techniquement, zz, zt, zb positionnent l' écran avec le curseur au milieu / haut / bas. pour positionner le curseur au milieu / en haut / en bas, utilisez M, H ou L. Les deux ensembles de commandes sont utiles!
Peter
1
La lecture de cet article il y a des mois ou un an m'a depuis aidé tous les jours. dap est quelque chose que j'utilise pour déplacer des paragraphes plusieurs fois par heure, grâce à ce post.
Funkodebat
33
Je n'ai jamais ramassé autant d'astuces sur une page qui a été marquée comme non constructive :) Merci à tous.
Tasos Bitsios
Réponses:
315
J'aurais vraiment aimé savoir que vous pouvez utiliser CtrlCau lieu de Escpasser du mode d'insertion. Cela a été un véritable coup de pouce pour ma productivité.
J'ai remappé mon Caps-Lock à un Esc. C'est à la fois plus facile que l'Esc normal et Ctrl-C
Kasper
114
Merde. 15 ans de vi et je n'ai jamais su ça ...
Chris K
31
un autre populaire était d'utiliser «jj» pour ESC. J'aime cette approche jusqu'à présent. :carte! jj <ESC>
claytron
27
Vous pouvez également utiliser CTRL- [(que j'aime parce que ce sont les deux petits doigts ... juste une petite rotation des deux mains).
Jason Down
42
utilisez 'jk' comme variante sur @ claytron's. si vous êtes déjà inconsciemment en mode INSERT, jk vous laisse où vous étiez, vous pouvez donc le frapper à tout moment (crédit: quelqu'un d'autre ... pas mon idée).
Kyle
197
L'astuce "wow" la plus récente que j'ai apprise est une méthode de recherche et de remplacement compliquée. Très souvent dans le passé, j'ai eu une expression rationnelle très compliquée pour faire des substitutions et cela n'a pas fonctionné. Il y a un meilleur moyen:
:set incsearch " I have this in .vimrc
/my complicated regexp " Highlighted as you enter characters
:%s//replace with this/ " You don't have to type it again
L'astuce ici (à défaut d'un meilleur mot) est la façon dont vous pouvez utiliser la recherche pour créer l'expression rationnelle (et 'incsearch' la met en surbrillance lorsque vous entrez des caractères), puis utilisez un modèle vide dans la substitution: le vide le motif par défaut est le dernier motif de recherche.
ouais, j'aurais aimé savoir cela plus tôt. Mais là encore, c'est ce que je dis à propos de tout ce que j'apprends qui est nouveau dans vim.
Robert Massaioli
26
Pour ceux qui aiment vraiment cela, essayez d'appuyer sur <Ctrl-R>/pour insérer la dernière requête de recherche. (Voir :help i_CTRL-R) Vraiment utile pour les mêmes que ci-dessus, mais vous voulez capturer une partie des résultats de la recherche. (comme ceci: %s:/\\([fF]rank\\) and mary/marie and \1/g)
idbrii
4
:%s//...fonctionne également avec *(mot de recherche sous le curseur). Un plugin appelé visual-star-search étend la fonctionnalité de *pour faire correspondre le texte entier d'une sélection visuelle, ce qui facilite la recherche et le remplacement du texte sélectionné, par exemple v3e(sélectionner visuellement 3 mots) *(rechercher) et :%s//replacement/g(remplacer toutes les occurrences par " remplacement"). J'utiliser si souvent que j'ai un mappage pour la commande de substitution globale: :nmap <Leader>s :%s///g<left><left>.
Patrick Oscity
1
@idbrii puisque les personnes qui lisent peuvent être des noeuds de Vim (moi), ce %s:devrait être le cas :%s, et pour mon système, j'avais besoin \(\)de\\(\\)
Charlie Gorichanaz
155
J'ai créé cette référence de ma commande la plus utilisée pour un de mes amis:
select v
select row(s) SHIFT + v
select blocks (columns) CTRL + v
indent selected text >
unindent selected text <
list buffers :ls
open buffer :bN (N = buffer number)
print :hardcopy
open a file :e /path/to/file.txt
:e C:\Path\To\File.txt
sort selected rows :sort
search for word under cursor *
open file under cursor gf
(absolute path or relative)
format selected code =
select contents of entire file ggVG
convert selected text to uppercase U
convert selected text to lowercase u
invert case of selected text ~
convert tabs to spaces :retab
start recording a macro qX (X = key to assign macro to)
stop recording a macro q
playback macro @X (X = key macro was assigned to)
replay previously played macro * @@
auto-complete a word you are typing ** CTRL + n
bookmark current place in file mX (X = key to assign bookmark to)
jump to bookmark `X (X = key bookmark was assigned to
` = back tick/tilde key)
show all bookmarks :marks
delete a bookmark :delm X (X = key bookmark to delete)
delete all bookmarks :delm!
split screen horizontally :split
split screen vertically :vsplit
navigating split screens CTRL + w + j = move down a screen
CTRL + w + k = move up a screen
CTRL + w + h = move left a screen
CTRL + w + l = move right a screen
close all other split screens :only
* - As with other commands in vi, you can playback a macro any number of times.
The following command would playback the macro assigned to the key `w' 100
times: 100@w
** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.
Vous listez "~ X" pour aller à la marque avec le nom X. Cela ne fonctionne pas pour moi - à la place j'utilise "'X" (guillemet simple).
Sensationnel. Vous avez absolument raison. Quand je tapais le guide, je suppose que mon œil n'a vu que le tilde et a glissé sur la tique arrière. Je mettrai à jour en conséquence. Merci pour l'information.
brian newman
5
cette liste est sympa, mais je veux vraiment savoir comment avez-vous dessiné ce tableau? avec VIM? quel plugin? J'en cherche un actuellement.
Kent
6
J'ai utilisé VIM, mais pas de plugin. Toutefois; l'utilisation de la fonction de sélection de bloc l'a rendu relativement facile. Heureux que vous ayez trouvé la liste utile! ~ brian
brian newman
11
Ctrl-Q pour la sélection de bloc est une spécificité de mswin.vim qui permet à CTRL-V de coller. La plupart des utilisateurs de vim considéreraient ce mal et désactiveraient mswin.vim. "+ P ou Ctrl-R + n'est pas si difficile à taper pour insérer le contenu du presse-papiers.
Benoit
144
gi passe en mode d'insertion, en plaçant le curseur au même endroit qu'il était auparavant.
J'étais tellement heureux quand j'ai découvert que g;cela me
faisait
@longdeqidao pas du tout. Il revient au dernier point d'insertion. Vous pouvez donc faire défiler le contenu de votre cœur et cela vous ramènera à votre dernière insertion.
Cyber Oliveira
9
FYI, g; (auquel @PatrickOscity a fait référence ci-dessus) place le curseur à l'endroit où une modification a été effectuée. Vous pouvez l'utiliser plusieurs fois pour revenir dans l'histoire. Notant ceci ici parce que mon aide vim ne le mentionne pas pour une raison étrange.
PonyEars
13
L'intuitivité de Vim ne cesse de m'impressionner. Puisque @PonyEars a mentionné que g;j'ai essayé si "l'opposé" était g,et voilà, nous pouvons avancer et reculer!
Cyber Oliveira
aest plus court. :) Mais giest en effet très intuitif, avec ggénéralement une opération opposée.
Erwin Rooijakkers
105
: q!
J'aurais aimé le savoir avant de commencer vi pour la première fois.
en tant que gars emacs, c'est le commentaire le plus drôle que j'ai lu. pas sûr que vous vouliez que ce soit. Tu m'as fait plaisir aujourd'hui.
pjammer
29
Je me souviens d'avoir essayé vim et emacs pour la première fois le même jour, sans savoir comment sortir non plus. Je me suis dit ce qui ne va pas avec ces gens!?
physicsmichael
13
+1. La première fois que vous démarrez vim, le message par défaut doit être "écrire: q pour quitter". J'aurais gagné tellement de temps lol
José Ramón
2
@ JoséRamón Mais il ne le montrer à l'écran par défaut si vous entrez dans vim sans ouvrir un fichier. Cela a-t-il été ajouté récemment? Je me souviens clairement d'avoir essayé vim il y a des années et c'était déjà là. Il vous indique également d'utiliser :q!si vous essayez de quitter sans enregistrer le tampon.
Mechalynx
5
@ivy_lynx oui, vous avez peut-être raison, mais seulement si vous ouvrez vim sans fichiers. Habituellement, la première fois que vous ouvrez vim, c'est parce que vous devez modifier un fichier de configuration sous Unix, donc vous écrivez "$ vim file" et vous ne pouvez pas trouver votre chemin. Ou suis-je le seul?
José Ramón
56
^ XF termine l'utilisation des noms de fichiers du répertoire courant. Plus de copier / coller depuis le terminal ou de double vérification douloureuse.
^ XP se termine en utilisant des mots dans le fichier actuel
: set scrollbind force un tampon à défiler à côté d'un autre. par exemple, divisez votre fenêtre en deux volets verticaux. Chargez un fichier dans chacun (peut-être différentes versions du même fichier). Faites :set scrollbinddans chacun. Maintenant, lorsque vous faites défiler dans un, les deux volets défileront ensemble. Idéal pour comparer des fichiers.
^ XP se termine avec préférence aux mots précédents du fichier, ^ XN avec préférence aux mots suivants du fichier.
u0b34a0f6ae
Vous pouvez également différencier des fichiers en ouvrant file1 et en exécutant :diffsplit file2ou en démarrant simplement vim avec vim -d file1 file2. Vim fait automatiquement défiler les deux fichiers.
Brian McCutchon
51
Vous pouvez utiliser un ensemble complet de commandes pour modifier le texte entre crochets / parenthèses / guillemets / balises. C'est super utile pour éviter d'avoir à trouver le début et la fin du groupe. Essayez en ci(, ci{, ci<, ci", ci', ctfonction du type d'objet que vous souhaitez modifier. Et les ca(, ca{, ...variantes suppriment également les crochets / guillemets.
Facile à retenir: changez à l'intérieur d'une instruction entre crochets / changez une instruction entre crochets.
ce n'est pas seulement pour c. Vous pouvez le faire avec dpour supprimer (par exemple di (ou da (), ypour tirer, vpour sélectionner etc.
Nathan Fellman
salut! Je voudrais savoir là la documentation pour cela utilise :help? Je ne peux le trouver nul part. > _ <
Matej
1
@Peter J'ai déjà vérifié ces informations, mais je n'ai pas trouvé de mention du comportement particulier "intérieur + délimiteur". Il s'avère que c'est dedans :help motion.txt! Merci!
Matej
2
cette astuce est la seule raison pour laquelle je suis passé à vi en premier lieu :)
Justin L.
1
Si vous modifiez HTML ou XML, vous pouvez utiliser citpour modifier le contenu de la balise actuelle. Par exemple dans <span>Some text</span>, si votre curseur est sur le "m", vous pouvez faire ditpour l'obtenir <span></span>.
Jonathan Potter
47
N'appuyez Escjamais. Voir cette réponse pour savoir pourquoi . Comme mentionné ci-dessus, Ctrl+ Cest une meilleure alternative. Je suggère fortement de mapper votre Caps Lockclé pour vous échapper.
Si vous modifiez une langue compatible Ctags , l'utilisation d'un fichier de balises et :ta, Ctrl+ ], etc. est un excellent moyen de parcourir le code, même sur plusieurs fichiers. De plus, l' achèvement de Ctrl+ Net Ctrl+ Pà l'aide du fichier de balises est un excellent moyen de réduire les frappes.
Si vous modifiez une ligne enveloppée parce qu'elle est plus large que votre tampon, vous pouvez vous déplacer vers le haut / vers le bas à l'aide de gk et gj.
Essayez de vous concentrer sur l'utilisation efficace des commandes de mouvement avant d'apprendre de mauvaises habitudes. Des choses comme utiliser 'dt' ou 'd3w' au lieu d'appuyer x fois sur plusieurs fois. Fondamentalement, chaque fois que vous vous trouvez en appuyant sur la même touche à plusieurs reprises, il existe probablement un moyen meilleur / plus rapide / plus concis d'accomplir la même chose.
Essayez 'man ctags' si vous utilisez * nix pour apprendre à générer un fichier "tags" qui indique à vim comment trouver la définition de n'importe quelle fonction ou variable dans de nombreuses langues en plus de C. Utilisez ctrl +] pour trouver la définition du jeton sous votre curseur, ou utilisez: tag tokenToFind pour trouver tout jeton qu'il connaît. Vous pouvez même démarrer vim avec "vim -t tokenToFind" pour ouvrir le fichier approprié et positionner le curseur sur la fonction à modifier.
Adam Liss
23
la touche # recherchera le mot sous le curseur dans le sens inverse
Pas tout à fait exact. Fonctionne comme :x, qui enregistre le fichier uniquement s'il y a des modifications, alors qu'il :wqenregistre toujours le fichier.
Erik B
ZQ (fonctionne comme: q!)
xialu
42
Certains de mes derniers ajouts à mon brainstore Vim:
^wi: Accédez au tag sous le curseur en divisant la fenêtre.
cib/ciB: Modifiez le texte à l'intérieur de l'ensemble actuel de parenthèses () ou d'accolades {}, respectivement.
:set listchars=tab:>-,trail:_ list: Afficher les tabulations / espaces de fin visuellement différents des autres espaces. Cela aide beaucoup avec le codage Python.
aussi: ciw pour changer le mot courant (ou caw, le même mais main gauche seulement) ciW pour changer le W = o. (rd) Sames avec v au lieu de c sélectionnera en visuel au lieu de remplacer
lajarre
5
cib équivaut à taper "ci (". Vous pouvez également faire "ci [", "ci {", ou (si votre vimrc est configuré correctement) "ci <", pour d'autres types de supports.
Tom Lord
2
Aussi, "cit" pour changer le texte à l'intérieur d'une balise. Très utile lorsque vous travaillez avec XML / HTML.
Walter
il convient également de mentionner que vous pouvez plutôt suffixer avec l'accolade de fermeture, si vous préférez cela. aussi, je viens d'apprendre sur ci}& cit- wow, ça va être très utile. vi[m]prouve un programme [s] très excitant!
underscore_d
37
gv démarre le mode visuel et sélectionne automatiquement ce que vous aviez précédemment sélectionné.
: shell pour lancer une console shell depuis Vim. Utile lorsque par exemple vous voulez tester un script sans quitter Vim. Appuyez simplement sur ^ d lorsque vous avez terminé avec la console shell, puis vous revenez à Vim et à votre fichier modifié.
Je suppose que :!shc'était trop dur. Je préfère cela parce qu'il est plus facile de composer des lignes de commande en utilisant des registres / complétions à partir du tampon actuel ou par exemple utiliser %/ %:hpour le nom de fichier / dirname actuel, etc.
sehe
1
Celui-ci est très cool. Je l'utilise tous les jours .. Avant c'était: wq, faire des trucs cli, rouvrir vim avec le même fichier .. Super optimisation
Flashin
7
Ctrl-Z pour passer au shell et fg <ENTER> pour revenir à vim.
Mario G.
Mettez map <Esc>! :shell<CR>votre .vimrc, et vous pouvez lancer le shell simplement avec Alt + !, ou Alt + Shift + 1. (Mnémonique: :!{cmd}s'exécute {cmd}avec la coquille.)
musiphil
:shelldémarrera cependant un nouveau niveau de shell imbriqué. Alors ctrl-zque non.
On vous demandera une phrase secrète, éditez et sauvegardez. Maintenant, chaque fois que vous ouvrez à nouveau le fichier dans vi, vous devrez entrer le mot de passe pour le visualiser.
Synchronisez ceci avec votre dropbox et vous obtenez un très bon gestionnaire de mots de passe ;-)
Luis Nell
15
Mais notez qu'à moins que vous set cryptmethod=blowfish(uniquement disponible en 7.3+), il utilise un algorithme avec une force risible. Voir help encryptionpour plus de détails.
AB
3
Veuillez ne pas utiliser le cryptage vim, ce n'est pas un bon cryptage et une mauvaise sécurité est pire qu'aucune. Plus d'infos: github.com/neovim/neovim/issues/694
Pas grand-chose, vraiment. Tu as besoin d'unMakefile dans le répertoire courant.
Compiler
Pendant que vous êtes dans Vim, tapez :makepour appeler un shell et construire votre programme. Ne vous inquiétez pas lorsque la sortie défile; appuyez simplement Enterlorsque vous avez terminé pour revenir à Vim.
La magie
De retour dans Vim, vous disposez des commandes suivantes:
:cl répertorie les erreurs, avertissements et autres messages.
:ccaffiche le message d'erreur / d'avertissement actuel au bas de l'écran et passe à la ligne incriminée dans votre code.
:cc nsaute au ne message.
:cn passe au message suivant.
:cp saute au message précédent.
Il y en a plus; si vous êtes intéressé, tapez à :help :ccpartir de Vim.
Wow, je ne connaissais pas ^ O et ^ I: c'est génial. Cela pourrait valoir la peine:help jump-motions etc dans votre réponse au cas où quelqu'un voudrait plus d'informations.
DrAl
consultez ShowMarks vim.org/scripts/script.php?script_id=152 . Cela vous aidera à vous rappeler où et quelles sont toutes vos marques dans un tampon. vous pouvez activer / désactiver la visualisation avec \ mt
tester
Je ne comprends pas la différence entre ^ P et ^ N ...
lajarre
@lajarre ils parcourent la liste des achèvements disponibles dans la direction opposée
Patrick Oscity
2
J'utilise souvent ^ O ^ O lors de l'ouverture de Vim après avoir remarqué que je souhaitais modifier à nouveau le dernier fichier modifié. Énorme gain de temps!
Patrick Oscity
24
Appuyez %lorsque le curseur se trouve sur une citation, une parenthèse, un crochet ou une accolade pour trouver sa correspondance.
Si le curseur n'est sur aucun de ceux-ci, il se déplace vers la droite jusqu'à ce qu'il touche l'un d'eux.
Cyber Oliveira
@ Léo: Merci pour le boni bonus!
Adam Liss
22
Jusqu'à [caractère] ( t). Il est utile pour toute commande qui accepte une plage. Mon préféré est ct;ou ct)qui supprime tout jusqu'au point-virgule / parenthèses fermantes et vous place ensuite en mode insertion.
Aussi, Get ggsont utiles (aller en bas et en haut respectivement).
le meilleur ici, bien que certains autres soient utiles aussi, je les connaissais déjà tous
Funkodebat
1
Aussi fau lieu de t, qui [action] montera à travers ce personnage; par exemple, avoir le curseur sur le début d'un argument de fonction, df,le supprimera (dans les langages appropriés, bien sûr).
Actorclavilis
t et f sont parfaits pour éditer une partie d'une variable camelCase. Par exemple, si vous venez de dupliquer une ligne et devez changer firstVariable en secondVariable, positionnez votre curseur au début de firstVariable, puis ctV
Greg
1
T et F fonctionnent également, mais dans la direction opposée.
Fede
20
^r^w pour coller le mot sous le curseur en mode commande.
Il est vraiment utile lors de l'utilisation de commandes grep ou replace.
: suivi du numéro de ligne fait de même: 42 passe à la ligne numéro 42
Anti Veeranna
12
Taper un numéro de ligne suivi de G a le même effet.
Cyber Oliveira
3
<number>gova au <number>e caractère du fichier.
Actorclavilis
17
Je souhaite que je connaissais les choses de base sur le mode de blocage visuel plus tôt. Même si vous n'utilisez Vim pour rien d'autre, cela peut être un gros gain de temps pour ouvrir un fichier dans Vim juste pour certaines opérations de bloc. Je suis sûr d'avoir perdu une tonne de temps à faire ce genre de chose manuellement.
Des exemples que j'ai trouvés particulièrement utiles lorsque, par exemple, la refactorisation de listes de noms de constantes symboliques de manière cohérente:
Entrer en mode Visual Block ( Ctrl+ Qpour moi sur Windows au lieu de Ctrl+V )
Déplacez le curseur pour mettre en surbrillance le bloc souhaité.
Alors, I whatever text et appuyez surEsc pour insérer le texte devant le bloc sur chaque ligne.
Utilisation A au lieu deI pour insérer le texte après le bloc sur chaque ligne.
Aussi - basculer simplement le cas d'une sélection visuelle avec ~ peut être un gros gain de temps.
Et supprimez simplement les colonnes, aussi, dbien sûr.
ne fonctionne pas pour moi, il déplace simplement un curseur au début du texte
Alex
14
q <letter> - enregistre une macro.
et
@ <same-letter> - le rejoue.
Ce sont de loin les commandes les plus utiles dans Vim car vous pouvez demander à l'ordinateur de faire beaucoup de travail pour vous, et vous n'avez même pas besoin d'écrire un programme ou quoi que ce soit.
L'utilisation de qsimplifie les choses, mais vous n'êtes pas obligé de l'utiliser: enregistrez simplement dans un tampon nommé la commande buffer "- par exemple, en utilisant buffer a- "ad$...
Mei
@Mei qenregistre une macro; les macros peuvent contenir des commandes, pas seulement du texte, elles sont donc "ad$différentes de qa.
Brian McCutchon
@Sortofabeginner Ce n'est pas pertinent ici. La commande "ad $ place le texte dans le tampon a et qa l'exécute.
Mei
2
@Mei qane l' exécute pas; qal'enregistre et l' @aexécute. Il est vrai que vous pouvez écrire une macro en texte brut, la stocker dans un registre aavec quelque chose comme "ad$, puis l'exécuter avec @a, mais c'est un peu plus de travail. Il existe une différence fondamentale entre le copier-coller et l'enregistrement-exécution.
Brian McCutchon
Ah! Je le savais. Merci pour la correction
Mei
13
Ouverture de plusieurs fichiers à l'aide d'onglets
:tabe filepath
Navigation entre les fichiers ouverts
gt and gT or :tabn and :tabp
Enregistrez la session ouverte afin de pouvoir revenir à votre liste de fichiers ouverts ultérieurement
:mksession session_file_name.vim
Ouvrir une session créée
vim -S session_file_name.vim
Fermez tous les fichiers à la fois
:qa
Une autre commande que j'ai apprise récemment
autocmd
Il vous permet d'exécuter une commande sur un événement, vous pouvez donc par exemple exécuter la commande make lorsque vous enregistrez un fichier en utilisant quelque chose comme:
qx commencera à enregistrer les frappes. Vous pouvez effectuer à peu près n'importe quelle tâche d'édition et Vim s'en souvient. Appuyez à nouveau sur q lorsque vous avez terminé, puis appuyez sur @x pour relire vos frappes. C'est idéal pour les modifications répétitives qui sont trop complexes pour écrire un mappage. Vous pouvez avoir de nombreux enregistrements en utilisant un caractère autre que x .
Le même caractère 'x' est également partagé entre la commande de macro d'enregistrement 'q' et les presse-papiers nommés ("x ...). Vous pouvez laisser des extraits de macros autour de votre fichier et les copier dans un presse-papiers nommé (par exemple" xyy ), puis lisez-les (@x).
Cyber Oliveira
Et si jamais vous créez la macro awesomist, vous pouvez coller ce presse-papiers dans votre _vimrc avec un 'let @x = ""' (mettre la macro dans le "") et l'enregistrer pour toujours!
Kearns
11
Je dois dire que l'un de mes favoris met la fenêtre d'aide dans un nouvel onglet:
:tab help <help_topic>
Cela ouvre l'aide dans un nouvel onglet et, en tant que personne qui aime les onglets Vim, cela est ridiculement utile.
Les tampons sont les onglets de vim. Ils sont mieux pris en charge par le workflow vim. Je soupçonne que des onglets n'ont été ajoutés à vim que parce que trop de gens ne comprenaient pas les tampons.
still_dreaming_1
Ok donc très peu de temps après avoir dit ça, j'ai trouvé une utilisation pour les onglets dans vim. Il est vrai que si vous utilisez un tampon par onglet, vous devez vous renseigner sur les tampons. Ce n'est pas ainsi que les onglets étaient destinés à être utilisés dans vim. La plupart des utilisateurs avancés de vim utilisent des tampons comme les onglets sont utilisés dans la plupart des programmes. Beaucoup de gens pensent que les onglets auraient dû être nommés mises en page dans vim. Ils sont principalement destinés à ouvrir différentes collections de fenêtres dans différents onglets. Vous pouvez également avoir un tampon spécifique que vous revenez à beaucoup ouvert dans un onglet, et utiliser l'autre onglet pour afficher tous les autres tampons.
still_dreaming_1
9
cw
Changer le mot - supprime le mot sous le curseur et vous met en mode insertion pour en saisir un nouveau. Bien sûr, cela fonctionne avec d'autres touches de mouvement, vous pouvez donc faire des choses comme c $ pour passer à la fin de la ligne.
caractère f +
Recherche l'occurrence suivante du caractère sur la ligne actuelle. Vous pouvez donc faire vft pour sélectionner tout le texte jusqu'au "t" suivant sur la ligne courante. C'est une autre clé de mouvement, donc elle fonctionne aussi avec d'autres commandes.
:b [any portion of a buffer name]pour changer de tampon. Donc, si vous avez deux tampons, "somefile1.txt" et "someotherfile2.txt", vous pouvez passer au second avec simplement":b 2.t<enter>" . Il prend également en charge la complétion des onglets, bien qu'il ne soit pas requis.
En parlant de complétion des onglets, le paramètre :set wildmode=full wildmenuest également très utile. Il permet la complétion complète des onglets en mode commande, ainsi qu'un menu très utile de style ncurses de toutes les correspondances possibles lors de son utilisation.
Vous pouvez utiliser d'autres caractères que /(barre oblique) pour séparer les modèles de substitution. De cette façon, vous n'avez pas à échapper aux barres obliques des chemins de fichiers.
Réponses:
J'aurais vraiment aimé savoir que vous pouvez utiliser CtrlCau lieu de Escpasser du mode d'insertion. Cela a été un véritable coup de pouce pour ma productivité.
la source
L'astuce "wow" la plus récente que j'ai apprise est une méthode de recherche et de remplacement compliquée. Très souvent dans le passé, j'ai eu une expression rationnelle très compliquée pour faire des substitutions et cela n'a pas fonctionné. Il y a un meilleur moyen:
L'astuce ici (à défaut d'un meilleur mot) est la façon dont vous pouvez utiliser la recherche pour créer l'expression rationnelle (et 'incsearch' la met en surbrillance lorsque vous entrez des caractères), puis utilisez un modèle vide dans la substitution: le vide le motif par défaut est le dernier motif de recherche.
Exemple:
Équivalent à:
Voir:
la source
<Ctrl-R>/
pour insérer la dernière requête de recherche. (Voir:help i_CTRL-R
) Vraiment utile pour les mêmes que ci-dessus, mais vous voulez capturer une partie des résultats de la recherche. (comme ceci:%s:/\\([fF]rank\\) and mary/marie and \1/g
):%s//...
fonctionne également avec*
(mot de recherche sous le curseur). Un plugin appelé visual-star-search étend la fonctionnalité de*
pour faire correspondre le texte entier d'une sélection visuelle, ce qui facilite la recherche et le remplacement du texte sélectionné, par exemplev3e
(sélectionner visuellement 3 mots)*
(rechercher) et:%s//replacement/g
(remplacer toutes les occurrences par " remplacement"). J'utiliser si souvent que j'ai un mappage pour la commande de substitution globale::nmap <Leader>s :%s///g<left><left>
.%s:
devrait être le cas:%s
, et pour mon système, j'avais besoin\(\)
de\\(\\)
J'ai créé cette référence de ma commande la plus utilisée pour un de mes amis:
la source
gi passe en mode d'insertion, en plaçant le curseur au même endroit qu'il était auparavant.
la source
g;
cela meg;
j'ai essayé si "l'opposé" étaitg,
et voilà, nous pouvons avancer et reculer!a
est plus court. :) Maisgi
est en effet très intuitif, avecg
généralement une opération opposée.J'aurais aimé le savoir avant de commencer vi pour la première fois.
la source
:q!
si vous essayez de quitter sans enregistrer le tampon.^ XF termine l'utilisation des noms de fichiers du répertoire courant. Plus de copier / coller depuis le terminal ou de double vérification douloureuse.
^ XP se termine en utilisant des mots dans le fichier actuel
: set scrollbind force un tampon à défiler à côté d'un autre. par exemple, divisez votre fenêtre en deux volets verticaux. Chargez un fichier dans chacun (peut-être différentes versions du même fichier). Faites
:set scrollbind
dans chacun. Maintenant, lorsque vous faites défiler dans un, les deux volets défileront ensemble. Idéal pour comparer des fichiers.la source
:set noscb
pour l'éteindre et utiliser:set scb
pour l'activer (pas:scrollbind
).:h scrollbind
:diffsplit file2
ou en démarrant simplement vim avecvim -d file1 file2
. Vim fait automatiquement défiler les deux fichiers.Vous pouvez utiliser un ensemble complet de commandes pour modifier le texte entre crochets / parenthèses / guillemets / balises. C'est super utile pour éviter d'avoir à trouver le début et la fin du groupe. Essayez en
ci(, ci{, ci<, ci", ci', ct
fonction du type d'objet que vous souhaitez modifier. Et lesca(, ca{, ...
variantes suppriment également les crochets / guillemets.Facile à retenir: changez à l'intérieur d'une instruction entre crochets / changez une instruction entre crochets.
la source
c
. Vous pouvez le faire avecd
pour supprimer (par exemple di (ou da (),y
pour tirer,v
pour sélectionner etc.:help
? Je ne peux le trouver nul part. > _ <:help motion.txt
! Merci!cit
pour modifier le contenu de la balise actuelle. Par exemple dans<span>Some text</span>
, si votre curseur est sur le "m", vous pouvez fairedit
pour l'obtenir<span></span>
.N'appuyez Escjamais. Voir cette réponse pour savoir pourquoi . Comme mentionné ci-dessus, Ctrl+ Cest une meilleure alternative. Je suggère fortement de mapper votre Caps Lockclé pour vous échapper.
Si vous modifiez une langue compatible Ctags , l'utilisation d'un fichier de balises et
:ta
, Ctrl+ ], etc. est un excellent moyen de parcourir le code, même sur plusieurs fichiers. De plus, l' achèvement de Ctrl+ Net Ctrl+ Pà l'aide du fichier de balises est un excellent moyen de réduire les frappes.Si vous modifiez une ligne enveloppée parce qu'elle est plus large que votre tampon, vous pouvez vous déplacer vers le haut / vers le bas à l'aide de gk et gj.
Essayez de vous concentrer sur l'utilisation efficace des commandes de mouvement avant d'apprendre de mauvaises habitudes. Des choses comme utiliser 'dt' ou 'd3w' au lieu d'appuyer x fois sur plusieurs fois. Fondamentalement, chaque fois que vous vous trouvez en appuyant sur la même touche à plusieurs reprises, il existe probablement un moyen meilleur / plus rapide / plus concis d'accomplir la même chose.
la source
La touche astérisque,, *recherchera le mot sous le curseur.
[+ vous Tabamènera à la définition d'une fonction C qui se trouve sous votre curseur. (Cela ne fonctionne pas toujours, cependant.)
la source
[ + Tab
fonctionnera toujours lorsque vouspath
set path+=path/to/files
ZZ
(fonctionne comme:wq
)Et à propos de la position du curseur: j'ai trouvé qu'un curseur qui reste toujours au milieu de l'écran est cool -
la source
:x
fait aussi:x
, qui enregistre le fichier uniquement s'il y a des modifications, alors qu'il:wq
enregistre toujours le fichier.Certains de mes derniers ajouts à mon brainstore Vim:
^wi
: Accédez au tag sous le curseur en divisant la fenêtre.cib/ciB
: Modifiez le texte à l'intérieur de l'ensemble actuel de parenthèses () ou d'accolades {}, respectivement.:set listchars=tab:>-,trail:_ list
: Afficher les tabulations / espaces de fin visuellement différents des autres espaces. Cela aide beaucoup avec le codage Python.la source
cib
c'est super.ci}
&cit
- wow, ça va être très utile.vi[m]
prouve un programme [s] très excitant!gv démarre le mode visuel et sélectionne automatiquement ce que vous aviez précédemment sélectionné.
la source
: shell pour lancer une console shell depuis Vim. Utile lorsque par exemple vous voulez tester un script sans quitter Vim. Appuyez simplement sur ^ d lorsque vous avez terminé avec la console shell, puis vous revenez à Vim et à votre fichier modifié.
la source
:!sh
c'était trop dur. Je préfère cela parce qu'il est plus facile de composer des lignes de commande en utilisant des registres / complétions à partir du tampon actuel ou par exemple utiliser%
/%:h
pour le nom de fichier / dirname actuel, etc.map <Esc>! :shell<CR>
votre.vimrc
, et vous pouvez lancer le shell simplement avec Alt + !, ou Alt + Shift + 1. (Mnémonique::!{cmd}
s'exécute{cmd}
avec la coquille.):shell
démarrera cependant un nouveau niveau de shell imbriqué. Alorsctrl-z
que non.Cela me réconforte toujours:
la source
vimcryption
vim -x filename.txt
On vous demandera une phrase secrète, éditez et sauvegardez. Maintenant, chaque fois que vous ouvrez à nouveau le fichier dans vi, vous devrez entrer le mot de passe pour le visualiser.
la source
set cryptmethod=blowfish
(uniquement disponible en 7.3+), il utilise un algorithme avec une force risible. Voirhelp encryption
pour plus de détails.:set cm=blowfish2
"Créez et déboguez votre code depuis Vim!
Configuration
Pas grand-chose, vraiment. Tu as besoin d'un
Makefile
dans le répertoire courant.Compiler
Pendant que vous êtes dans Vim, tapez
:make
pour appeler un shell et construire votre programme. Ne vous inquiétez pas lorsque la sortie défile; appuyez simplement Enterlorsque vous avez terminé pour revenir à Vim.La magie
De retour dans Vim, vous disposez des commandes suivantes:
:cl
répertorie les erreurs, avertissements et autres messages.:cc
affiche le message d'erreur / d'avertissement actuel au bas de l'écran et passe à la ligne incriminée dans votre code.:cc n
saute aun
e message.:cn
passe au message suivant.:cp
saute au message précédent.Il y en a plus; si vous êtes intéressé, tapez à
:help :cc
partir de Vim.la source
^ P et ^ N
Complétez le texte précédent (^ P) ou suivant (^ N).
^ O et ^ I
Allez à l'emplacement précédent (^ O - "O" pour l'ancien) ou à l'emplacement suivant (^ I - "I" juste à côté de "O").
Lorsque vous effectuez des recherches, modifiez des fichiers, etc., vous pouvez parcourir ces «sauts» vers l'avant et l'arrière.
Des marques
Appuyez sur ma (marque m, a - nom de la marque). Plus tard, pour revenir à la position, tapez `a .
la source
:help jump-motions
etc dans votre réponse au cas où quelqu'un voudrait plus d'informations.Appuyez
%
lorsque le curseur se trouve sur une citation, une parenthèse, un crochet ou une accolade pour trouver sa correspondance.la source
Jusqu'à [caractère] (
t
). Il est utile pour toute commande qui accepte une plage. Mon préféré estct;
ouct)
qui supprime tout jusqu'au point-virgule / parenthèses fermantes et vous place ensuite en mode insertion.Aussi,
G
etgg
sont utiles (aller en bas et en haut respectivement).la source
f
au lieu det
, qui [action] montera à travers ce personnage; par exemple, avoir le curseur sur le début d'un argument de fonction,df,
le supprimera (dans les langages appropriés, bien sûr).^r^w
pour coller le mot sous le curseur en mode commande.Il est vraiment utile lors de l'utilisation de commandes grep ou replace.
la source
Taper un numéro de ligne suivi de vous
gg
amènera à cette ligne.la source
<number>go
va au<number>
e caractère du fichier.Je souhaite que je connaissais les choses de base sur le mode de blocage visuel plus tôt. Même si vous n'utilisez Vim pour rien d'autre, cela peut être un gros gain de temps pour ouvrir un fichier dans Vim juste pour certaines opérations de bloc. Je suis sûr d'avoir perdu une tonne de temps à faire ce genre de chose manuellement.
Des exemples que j'ai trouvés particulièrement utiles lorsque, par exemple, la refactorisation de listes de noms de constantes symboliques de manière cohérente:
Entrer en mode Visual Block ( Ctrl+ Qpour moi sur Windows au lieu de Ctrl+V )
Déplacez le curseur pour mettre en surbrillance le bloc souhaité.
Alors,
I whatever text
et appuyez surEsc pour insérer le texte devant le bloc sur chaque ligne.Utilisation
A
au lieu deI
pour insérer le texte après le bloc sur chaque ligne.Aussi - basculer simplement le cas d'une sélection visuelle avec
~
peut être un gros gain de temps.Et supprimez simplement les colonnes, aussi,
d
bien sûr.la source
^ y copiera le caractère au-dessus du curseur.
la source
q <letter> - enregistre une macro.
et
@ <same-letter> - le rejoue.
Ce sont de loin les commandes les plus utiles dans Vim car vous pouvez demander à l'ordinateur de faire beaucoup de travail pour vous, et vous n'avez même pas besoin d'écrire un programme ou quoi que ce soit.
la source
q
simplifie les choses, mais vous n'êtes pas obligé de l'utiliser: enregistrez simplement dans un tampon nommé la commande buffer"
- par exemple, en utilisant buffera
-"ad$
...q
enregistre une macro; les macros peuvent contenir des commandes, pas seulement du texte, elles sont donc"ad$
différentes deqa
.qa
ne l' exécute pas;qa
l'enregistre et l'@a
exécute. Il est vrai que vous pouvez écrire une macro en texte brut, la stocker dans un registrea
avec quelque chose comme"ad$
, puis l'exécuter avec@a
, mais c'est un peu plus de travail. Il existe une différence fondamentale entre le copier-coller et l'enregistrement-exécution.Ouverture de plusieurs fichiers à l'aide d'onglets
Navigation entre les fichiers ouverts
Enregistrez la session ouverte afin de pouvoir revenir à votre liste de fichiers ouverts ultérieurement
Ouvrir une session créée
Fermez tous les fichiers à la fois
Une autre commande que j'ai apprise récemment
Il vous permet d'exécuter une commande sur un événement, vous pouvez donc par exemple exécuter la commande make lorsque vous enregistrez un fichier en utilisant quelque chose comme:
la source
qx commencera à enregistrer les frappes. Vous pouvez effectuer à peu près n'importe quelle tâche d'édition et Vim s'en souvient. Appuyez à nouveau sur q lorsque vous avez terminé, puis appuyez sur @x pour relire vos frappes. C'est idéal pour les modifications répétitives qui sont trop complexes pour écrire un mappage. Vous pouvez avoir de nombreux enregistrements en utilisant un caractère autre que x .
la source
Je dois dire que l'un de mes favoris met la fenêtre d'aide dans un nouvel onglet:
Cela ouvre l'aide dans un nouvel onglet et, en tant que personne qui aime les onglets Vim, cela est ridiculement utile.
la source
cw
Changer le mot - supprime le mot sous le curseur et vous met en mode insertion pour en saisir un nouveau. Bien sûr, cela fonctionne avec d'autres touches de mouvement, vous pouvez donc faire des choses comme c $ pour passer à la fin de la ligne.
caractère f +
Recherche l'occurrence suivante du caractère sur la ligne actuelle. Vous pouvez donc faire vft pour sélectionner tout le texte jusqu'au "t" suivant sur la ligne courante. C'est une autre clé de mouvement, donc elle fonctionne aussi avec d'autres commandes.
la source
:b [any portion of a buffer name]
pour changer de tampon. Donc, si vous avez deux tampons, "somefile1.txt" et "someotherfile2.txt", vous pouvez passer au second avec simplement":b 2.t<enter>"
. Il prend également en charge la complétion des onglets, bien qu'il ne soit pas requis.En parlant de complétion des onglets, le paramètre
:set wildmode=full wildmenu
est également très utile. Il permet la complétion complète des onglets en mode commande, ainsi qu'un menu très utile de style ncurses de toutes les correspondances possibles lors de son utilisation.la source
:% s, / rechercher, / remplacer,
Vous pouvez utiliser d'autres caractères que
/
(barre oblique) pour séparer les modèles de substitution. De cette façon, vous n'avez pas à échapper aux barres obliques des chemins de fichiers.la source
sed
j'avais ça, mais pasvim
. Plus vous en savez ♒ ☆