Quels sont les coins sombres de Vim votre maman n'a jamais dit à vous parler?
Il existe une pléthore de questions où les gens de parler des trucs, notamment "Vim+ctags trucs et astuces".
Cependant, je ne vous parle pas couramment utilisé des raccourcis que quelqu'un de nouveau à Vim trouverais cool. Je parle d'un chevronnés Unix de l'utilisateur (qu'il soit développeur, administrateur, à la fois, etc.), qui pensent qu'ils savent quelque chose que 99% d'entre nous n'a jamais entendu ou imaginé. Quelque chose qui non seulement rend leur travail plus facile, mais aussi est COOL et hackish. Après tout, Vim réside dans la plus sombre coin riche en OS dans le monde, donc il devrait avoir des subtilités que seuls quelques privilégiés connaissent et qui veulent partager avec nous.
- Lancement d'un autre éditeur ou des commandes à l'aide !commandName
- :Sexe Fractionner la fenêtre et ouvrir l'explorateur de fichiers intégré (split horizontal)
- Cette question semble être assez constructif en regardant le nombre de upvotes... , voté à rouvrir - peut-être que certains d'encore plus cool réponse arrive - ce qui peut être upvoted si utile - en lui donnant plus de valeur à des forces d'opérations spéciales. Commander les réponses par les votes, j'ai appris beaucoup de trucs cool en tout juste 5 minutes... vraiment précieux trucs ici, pourquoi quelque chose de proche de cette valeur ? Comment est-ce constructif ?
- Voici quelques obscures conseils que je peux penser: pastebin.com/BGGkBmVw
- Ridicule que cette question est fermée. Parler de légalisme.
- Je pense que cette question est très constructif mais, plus approprié à Quora.
- :Vex Fractionner la fenêtre et ouvrir l'explorateur de fichiers intégré (split vertical)
- Pourquoi 2(dès à présent) votes pour supprimer cette question? À quoi bon serait-il possible de faire?
- Au lieu de voter pour le supprimer, un "NOTE: Cette question n'est PAS sur le sujet pour Stack Overflow. Ne posez pas de questions similaires dans l'avenir." devrait suffire.
Vous devez vous connecter pour publier un commentaire.
Peut-être pas un que 99% de Vim utilisateurs ne sais pas, mais c'est quelque chose que j'utilise quotidiennement et qui tout Linux+Vim poweruser doit le savoir.
De commande de base, mais extrêmement utile.
J'oublie souvent de sudo avant la modification d'un fichier, je n'ai pas les autorisations d'écriture sur. Quand je viens de l'enregistrer et d'obtenir une erreur de permission, je viens de question que les commandes de vim pour enregistrer le fichier sans avoir besoin de l'enregistrer dans un fichier temporaire, puis de le copier à nouveau.
Vous avez évidemment à être sur un système avec sudo et avoir installé sudo droits.
cmap x!! w !sudo tee %<CR><CR>:q!<CR>
sudo vim
. Au lieu de cela, vous devez l'exporterEDITOR
que vim et exécutersudoedit
.Quelque chose que je viens de découvrir récemment que j'ai trouvé très cool:
Revient le document redevenue ce qu'elle était il y a 15 minutes. Peut prendre plusieurs arguments en faveur de la quantité de temps que vous voulez revenir en arrière, et dépend de undolevels. Peut être inversé avec la commande opposée
:later
:later 8h
et j'en ai fini pour aujourd'hui? 😛:! [command]
exécute une commande externe alors que vous êtes dans Vim.Mais ajouter un point après les deux-points,
:.! [command]
, et il va faire un dump de la sortie de la commande dans votre fenêtre actuelle. C'est: . !
Par exemple:
J'utilise beaucoup pour des choses comme l'ajout de la date du jour dans un document que je suis en tapant:
:.!date
est d'écrire "date" sur une ligne, puis exécutez!$sh
(vous pouvez également avoir la commande suivie d'une ligne vide et exécuter!jsh
). Cela va de la pipe de la ligne à la "sh" coquille et suppléant avec la sortie de la commande.:.!
est en fait un cas particulier de:{range}!
, qui permet de filtrer une plage de lignes (la ligne en cours lorsque la plage est.
) via une commande et remplace ces lignes à la sortie. Je trouve:%!
utile pour filtrer l'ensemble des tampons.sed
, lorsque vous pouvez utiliser la même intégré dansed
/ex
commandes? Essayez d'exécuter:.s/old/new/g
😉!!
) pour remplir automatiquement les:.!
? Très pratique lorsque vous n'avez pas envie de taper tout ça. Il fonctionne même dansvim -u none
Pas exactement obscur, mais il y a plusieurs "supprimer" les commandes qui sont extrêmement utiles, comme..
diw
pour supprimer le mot courantdi(
à supprimer dans l'état actuel des parensdi"
pour supprimer le texte entre les guillemetsD'autres peuvent être trouvés sur
:texte d'aide-objets
xf)x
(supprimer le support, passez à la suivante ) et de supprimer à nouveau)de Supprimer tout jusqu'à la fin du mot en appuyant sur . au désir de votre coeur.
ci(xyz[Esc] -- C'est une bizarre. Ici, le " je " ne signifie pas en mode insertion. Au lieu de cela il s'agit de l'intérieur de la parenthèse. Si cette séquence coupe le texte à l'intérieur de la parenthèse vous êtes debout et le remplace par "xyz". Il travaille également à l'intérieur de place et figure entre parenthèses -- viens de faire ci[ ou ci{ en conséquence. Naturellement, vous pouvez le faire di (si vous voulez juste pour supprimer tout le texte sans avoir à taper quoi que ce soit. Vous pouvez également faire
a
au lieu dei
si vous souhaitez supprimer les parenthèses ainsi et pas seulement du texte à l'intérieur d'eux.ci" - coupe le texte actuel de citations
ciw - coupe le mot en cours. Cela fonctionne exactement comme le précédent, sauf que
(
est remplacé parw
.C - couper le reste de la ligne et passe en mode insertion.
ZZ - enregistrer et fermer le fichier en cours (de MANIÈRE plus rapide que Ctrl-F4 pour fermer l'onglet en cours!)
ddp - déplacer courant d'une ligne vers le bas
xp -- déplacer le personnage d'une position vers la droite
U - majuscules, donc
viwU
upercases le mot~ - commutateurs cas,
viw~
inverse boîtier de la totalité de la paroleCtrl+u Ctrl+d faire défiler la page d'un demi-écran vers le haut ou vers le bas. Cela semble être plus utile que d'habitude plein écran de pagination comme il est plus facile de voir comment les deux écrans se rapportent. Pour ceux qui veulent encore faire défiler la totalité de l'écran à un moment il y a Ctrl+f pour l'Avant et Ctrl+b pour revenir en Arrière. Ctrl+O et Ctrl+E faites défiler vers le bas ou vers le haut une ligne à la fois.
Fou, mais très utile de commande est zz -- il fait défiler l'écran pour faire de cette ligne apparaît dans le milieu. C'est excellent pour mettre le morceau de code que vous travaillez dans le centre de votre attention. Frère commandes -- zt et zb -- faire de cette ligne, le haut ou le bas sur l'écran qui n'est pas très utile.
% trouve et les sauts à la mise en correspondance entre parenthèses.
de -- supprimer à partir du curseur jusqu'à la fin du mot (vous pouvez aussi le faire
dE
à supprimer jusqu'à l'espace suivant)bde -- supprimer le mot courant, de gauche à droite délimiteur
df[espace] -- delete jusqu'à et y compris l'espace suivant
dt. -- delete jusqu'à la prochaine dot
dd -- effacer toute cette ligne
vous (ou vous) -- yankees le texte d'ici à la fin du mot
ce - coupe à travers la fin du mot
bye -- des copies mot courant (je me demande ce que "salut" n'!)
yy -- copie la ligne courante
cc -- coupe la ligne en cours, vous pouvez également faire
S
à la place. Il y a également capot inférieurs
qui coupe le caractère en cours et passe en mode insertion.viwy ou viwc. Copier ou modifier le mot en cours. Hit
w
à plusieurs reprises pour garder la sélection de chaque mot, de l'utilisationb
à se déplacer vers l'arrièrevi{ - sélectionner tout le texte figure entre parenthèses. va{ - sélectionner tout le texte, y compris {}s
vi(p - mettre en évidence tout à l'intérieur de la ()s et de les remplacer par le texte collé
b et e déplacer le curseur de mot-à-mot, de la même manière que les touches Ctrl+Flèches, normalement, ne. La définition du mot est un peu différent, comme plusieurs consécutive delmiters sont traités comme un seul mot. Si vous commencez au milieu d'un mot, en appuyant sur b sera toujours de vous rendre au début du mot courant, et chaque b consécutives saute au début du mot suivant. De la même façon, et facile à retenir,
e
obtient le curseur à la fin de l'actuel, et chaque suite, mot.similaire à
b
/e
, capitalB
etE
déplacer le curseur de mot-à-mot en utilisant uniquement des espaces comme des séparateurs.capital D (prenez une profonde respiration) Supprime le reste de la ligne à droite du curseur, comme Maj+Fin/Del normal éditeurs (préavis de 2 touches -- Maj+D -- au lieu de 3)
vity
etvitc
peut être raccourcie àyit
etcit
respectivement..
).zt
etzb
devenir tout aussi usefule commezz
avec un paramètre commescrolloff=2
bye
ne fonctionne pas lorsque vous êtes dans le premier caractère du mot.yiw
le fait toujours.d*
puisi
. Aussi, l'aide n'est pas explicitement appeler "changement" - est-ce officiel?$
drapeau danscpoptions
activé. Le "changement" est le mnémonique j'avais appris de la vi, et semble être assez commun. Voir stackoverflow.com/questions/7409134/...ZZ
seul, mais le reste est à peine coin sombre.cw
(changement de mot) au lieu deciw
.Un que je trouve rarement dans la plupart des Vim tutoriels, mais il est INCROYABLEMENT utile (au moins pour moi), est le
g; and g,
de déplacement (avant, arrière) par le biais de la liste de modifications.
Laissez-moi vous montrer comment je l'utilise. Parfois j'ai besoin de copier et coller un morceau de code ou de chaîne, dire une couleur hexadécimale du code dans un fichier CSS, donc je recherche, sauter (pas de soin où le match est), le copier puis sautez en arrière (g;) d'où j'ai modifier le code pour enfin coller. Pas besoin de créer des marques. Plus simple.
Seulement mes 2cents.
'.
va aller à la dernière édition de la ligne, Et`.
va aller à la dernière édition de position<C-o>
/<C-i>
de ce tout le temps - ou le marquage ma place.De vim dans un éditeur hexadécimal.
Revenir.
Avertissement: Si vous ne modifiez pas les binaires (-b), vous pourriez endommager le fichier. – Josh Lee dans les commentaires.
:%!xxd -r
pour revenir en arrièrexxd -r
de revenir correctement. Chaque fois que je le fais, il corrompt le binaire et 99% du fichier est manquant. Je suppose que c'est dû à unNUL
octet apparaître quelque part, et les chaînes se terminant par null. Cela se produit même si j'ai mis en binaire et noeol à partir de vim. Donc, merci @JoshLee pour lavim -b
astuce, mais je toujours ne vous fiez pas:%!xxd -r
.Resélectionne dernière sélection visual.
Parfois un paramètre dans votre .vimrc obtiendrez remplacé par un plugin ou autocommand. Pour déboguer ce une astuce utile est d'utiliser l': - verbose commande en conjonction avec :set. Par exemple, pour comprendre où cindent obtenu définir/annuler:
Ce sera quelque chose de sortie:
Cela fonctionne aussi avec des cartes et des faits saillants. (Merci joeytwiddle pour le rappeler.) Par exemple:
:verbose
peut également être utilisé avantnmap l
ouhighlight Normal
de savoir d'où l'l
de la disposition du clavier ou de laNormal
mettre en surbrillance la dernière défini. Très utile pour le débogage!Ne sais pas si cela compte comme dark-coin-ish, mais j'ai seulement appris...
va copier toutes les lignes contenant "match" dans le
"a
/@a
registre. (La capitalisationA
fait vim ajouter yankings au lieu de remplacer le précédent contenu d'un registre.) J'ai utilisé beaucoup récemment lors de la prise de Internet Explorer feuilles de style.:v/PATTERN/d
Explication::v
est une abréviation pour:g!
, et la:g
commande s'applique à toute commande ex de lignes.:y[ank]
, et ainsi de ne:normal
, mais ici, la chose la plus naturelle à faire est de simplement:d[elete]
.:g/match/normal "Ayy
-- lenormal
mot-clé vous permet de dire à exécution normale des commandes de mode (que vous êtes probablement plus familier avec).:%TOhtml
Crée un rendu html du fichier en cours.
Voulez regarder votre :commande de l'histoire?
Puis parcourir, modifier et enfin pour exécuter la commande.
Jamais apporter des modifications similaires pour les deux fichiers et basculer entre eux? (Par exemple, la source et les fichiers d'en-tête?)
Puis onglet en arrière-et-vient entre ces fichiers.
q:
par accident tout le temps...<C-^>
qui bascule entre les deux derniers tampons, donc tout ce que vous avez est à reconfigurer cette touche sur<tab>
. Et si vous êtes montage un C/C++ fichier, vous pourrez basculer entre l'en-tête. Pour plus d'info,:help alternate
:help cmdwin
Vim va ouvrir une URL, par exemple
Agréable quand vous avez besoin d'extraire le code source de la page de référence.
Les Macros peuvent appeler d'autres macros, et peut également s'appeler lui-même.
par exemple:
...va supprimer le premier mot de chaque ligne jusqu'à la fin du fichier.
C'est tout à fait un exemple simple, mais il montre une fonctionnalité très puissante de vim
qqqqqifuu<Esc>h@qq@q
:normal! @a
à applyyour macro pour chaque ligne dans votre sélection.En supposant que vous avez Perl et/ou à la prise en charge de Ruby compilé,
:rubydo
et:perldo
va lancer un Ruby ou Perl one-liner sur chaque ligne dans une gamme (par défaut à l'ensemble de la zone tampon), avec$_
lié au texte de la ligne courante (sans saut de ligne). La manipulation de$_
va changer le texte de cette ligne.Vous pouvez l'utiliser pour faire certaines choses qui sont faciles à faire dans un langage de script, mais pas si évident à l'aide de Vim objets internes. Par exemple pour inverser l'ordre des mots dans une ligne:
Pour insérer une chaîne aléatoire de 8 caractères (A-Z) à la fin de chaque ligne:
Vous êtes limité à agir sur une seule ligne à la fois et vous ne pouvez pas ajouter des retours à la ligne.
pydo
etpy3do
travail pour python si vous en avez le soutien compilé.luado
pour Lua, si vous en avez compiler le supporthttps://www.youtube.com/watch?v=DKol_ThaMWc
^O et ^je
Aller plus anciens/les plus récents position.
Lorsque vous vous déplacez à travers le fichier (par la recherche, le déplacement des commandes, etc.) vim rember ces "sauts", de sorte que vous pouvez répéter ces sauts vers l'arrière (^O - O pour les vieux) et forward (^I - juste à côté de I sur le clavier). Je trouve cela très utile lors de l'écriture de code et d'effectuer beaucoup de recherches.
gi
Aller à la position où le mode d'Insertion a été arrêté en dernier.
Je me retrouve souvent à l'édition et à la recherche de quelque chose. Pour revenir à l'édition de place appuyez sur gi.
gf
mettre le curseur sur le nom de fichier (par exemple, inclure l'en-tête de fichier), appuyez sur gf et le fichier est ouvert
gF
similaire à gf, mais reconnaît format "[nom de fichier]:[numéro de ligne]". En appuyant sur gF va s'ouvrir [nom de fichier] et réglez le curseur sur [numéro de ligne].
^P et ^N
Automatique de texte lors de l'édition (^P - match précédent et ^N prochain match)
^X^L
Lors de l'édition complète de la même ligne (utile pour la programmation).
Vous écrivez du code, puis vous vous souvenez que vous avez le même code quelque part dans le fichier. Appuyez simplement sur ^X^L et sur la gamme complète terminé
^X^F
Complète des noms de fichier.
Vous écrivez "/etc/pass" Hmm. Vous avez oublié le nom de fichier. Appuyez simplement sur ^X^F et le nom de fichier est terminé
^Z ou :sh
Déplacement temporaire de la coquille. Si vous avez besoin d'un rapide bashing:
^X^F
ma bête noire, c'est que les noms de fichiers comprennent=
signes, faisant d'elle ne pourri choses en de nombreuses occasions (fichiers ini, makefiles, etc). J'utilisese isfname-==
pour mettre fin à cette nuisanceC'est une belle astuce pour rouvrir le fichier en cours avec un codage différent:
Utile lorsque vous avez à travailler avec les anciens codages. Le codage pris en charge sont répertoriés dans un tableau sous
encoding-values
(voirhelp
encoding-values
). Même chose travaille aussi pour++ff
, de sorte que vous pouvez rouvrir le fichier avec Windows/Unix ligne se termine si vous vous trompez, pour la première fois (voirhelp
ff
).i10.0.0.1<Esc>Y254p$<C-v>}g<C-a>
g
est censé êtreG
(aller à la dernière ligne)?<C-a>
n'augmente que par un, vous vous retrouverez avec10.0.0.1
sur la première ligne, et10.0.0.2
sur la prochaine 254 lignes.G
qui va vers le premier caractère de la dernière ligne.g<C-a>
est plage incrément - il incrémente la première ligne par 1, le suivant par 2 et ainsi de suite..}
, désolé.:help v_g_CTRL-A
montre à l'aide d'incrémentation de plus. Merci pour l'explication!Tapant == va corriger l'indentation de la ligne actuelle basée sur la ligne ci-dessus.
Fait, vous pouvez faire un signe = suivi par toute commande de mouvement. ={mouvement}
Par exemple, vous pouvez utiliser le % de mouvement qui se déplace entre parenthèse. Placez le curseur sur l' { dans le code suivant:
Et appuyez sur =% instantanément d'obtenir ceci:
Alternativement, vous pourriez faire =a{ dans le bloc de code, plutôt que de vous positionner à droite sur l' { personnage.
=}
ouvaBaB=
parce qu'il est moins dépendante. Aussi,v}}:!astyle -bj
correspond à mon style de code mieux, mais je peux le récupérer dans votre style avec un simple%!astyle -aj
gg=G
est assez nette lors du collage dans quelque chose.ggVG=
.vim "+'0"
(utiliser undofile et viminfo pour les bonus). Maintenant,ZQ
aurait être un accident, mais pas aussi susceptible de se produire par hasardii
etjj
sont couramment utilisés pour lutter contre les variables, cari
etj
sont réservés pour les nombres complexes.control-c
pour quitter le mode insertion, la seule contrainte est que je ne peut pas utilisercontrol-c
après que j'ai inséré du texte dans Visual en mode bloc. J'ai besoin d'utiliseresc
pour ce cas.<esc>
est vraiment mauvais, je trouvectrl-[
assez confortable de ne pas regarder pour les remplacements. Me sentais un peu bizarre au début, mais maintenant, c'est une seconde nature.jk
- une fois que vous allez jk, vous n'avez pas utiliser quoi que ce soit d'autre. J'aiShift+Space
pour basculer en mode insertion, à l'échelle du système des casquettes, des esc,jj
et intégré dansC-[
. Maisjk
bat tous les records. Je l'ai lu dans le vim wikia, mais ignoré, parce que je ne serais pas capable d'écrire jk! Il a été un moment depuis et jamais, jamais, jamais nécessaires à l'écriture de la maternelle à la lettre. Il devrait être un vim par défaut 🙂 imap jk <ESC> vmap jk <ESC> (quitter le mode visuel!)jk
est mieux. Je me retrouve souvent à faire justejkjkjkjk
plus et plus maintenant, alors que la pensée. Il n'a pas de vis de la position du curseur, et il me permet de savoir ce que la fenêtre/volet je suis sur. J'ai mappéjk
etkj
de s'échapper. Pour moi,jj
est inférieur parce que le curseur est alors 2 lignes en bas.u
et il fait que des trucs bizarres quiU
n'. Essayez d'aller à droite et vous allez tout en bas de la page. Et il mess avec vous jusqu'à ce que vous essayez d'insérer aveci
, qui vous emmène au début de la ligne plutôt que de l'endroit où vous étiez, et ensuite de TAPER SORT COMME ça. Il y a une autre raison de re - ou non-de la carte de verrouillage des majuscules.Nous allons voir quelques jolis petits IDE éditeur n'colonne de transposition.
Explication
\(
et\)
est de savoir comment rappelez-vous trucs en regex terre. Et\1
,\2
etc est comment récupérer le rappeler choses.Souviens de tout suivi par
^I
(onglet), suivi par tout.Remplacer les trucs ci-dessus avec "les 2 trucs que vous rappeler", suivi par "le 1er truc que vous avez rappelée" - essentiellement de faire une transposition.
Pas exactement un secret sombre, mais j'aime bien mettre le mappage suivant dans mon .fichiers vimrc, donc je peux "-" (moins) à tout moment pour ouvrir l'explorateur de fichiers pour afficher les fichiers adjacent à celui que je viens de modifier. Dans l'explorateur de fichier, je peux frapper un autre "-" pour remonter d'un répertoire, à la possibilité de la navigation d'un complexe de structures de répertoire (comme celles utilisées par la MVC cadres aujourd'hui):
Il peut être également utile pour quelqu'un. J'aime faire défiler l'écran et faire avancer le curseur à la même époque:
Onglet de navigation - j'aime les onglets et j'ai besoin de vous déplacer facilement entre eux:
Uniquement sur Mac OS X: Safari-comme la navigation par onglets:
J'aime utiliser "sudo bash", et mes sysadmin déteste cela. Il a verrouillé 'sudo' de sorte qu'il ne pouvait être utilisé qu'avec une poignée de commandes (ls, chmod, chown, vi, etc), mais j'ai été en mesure d'utiliser vim pour obtenir un shell root de toute façon:
Souvent, j'aime à changer les répertoires lors de l'édition - et j'ai donc spécifier les chemins d'accès de moins en moins.
J'utilise souvent de nombreuses fenêtres quand je travaille sur un projet et parfois j'ai besoin de les redimensionner. Voici ce que j'utilise:
Ces correspondances permettent d'augmenter et de diminuer la taille de la fenêtre courante. C'est assez simple, mais il est rapide.
Pas une fonctionnalité obscure, mais très utile et les économies de temps.
Si vous souhaitez enregistrer une session de votre ouverture des tampons, des onglets, des marqueurs, et d'autres paramètres, vous pouvez exécuter les opérations suivantes:
Vous pouvez ouvrir votre session à l'aide de:
:so session.vim
à l'intérieur de vim.pâtes à la sortie d'une commande externe dans la mémoire tampon.
Faire quelques calculs et obtenir le résultat directement dans le texte:
Obtenir la liste des fichiers à compiler lors de l'écriture d'un fichier Makefile:
Ne regardez pas que le fait de vous lire sur wikipedia, ont directement collé dans le document en cours d'écriture:
Carte F5 rapidement ROT13 votre tampon:
Vous pouvez l'utiliser comme une clé boss :).
nmap i ggg?G``
. Ou le diabolique:nmap i ggg?G``i
!Je viens de trouver celui d'aujourd'hui via NSFAQ:
Commentaire des blocs de code.
Entrer Blockwise mode Visuel par CTRL-V.
Marque le bloc que vous souhaitez faire des commentaires.
Succès I (I majuscule) et saisissez votre commentaire chaîne de caractères au début de la ligne. (//pour C++)
Appuyez sur ESC et toutes les lignes sélectionnées auront //préfixé à l'avant de la ligne.
\cc
- ligne de commentaire.5\cc
commentaire 5 lignes.5\ci
- inverser commentaire de la prochaine 5 lignes (lignes commentées sera retirée, et vice-versa).5\cs
- bloc de commentaire les 5 lignes de code. etc. etc.J'utilise vim pour à peu près n'importe quel texte de l'édition de moi, aussi j'ai souvent utiliser le copier-coller. Le problème est que vim par défaut va souvent de déformer le texte importé via la commande coller. Le moyen de l'arrêter est d'utiliser
avant de le coller dans vos données. Ce sera l'empêcher de gâcher.
Noter que vous devrez question
:set nopaste
pour récupérer l'auto-indentation. D'autres moyens de collage pré-formaté texte du presse-papiers registres (*
et+
), et:r!cat
(vous aurez à la fin du fragment avec ^D).Il est aussi parfois utile d'activer un contraste élevé de couleurs. Cela peut être fait avec
J'ai remarqué qu'il ne fonctionne pas sur toutes les versions de vim-je utiliser, mais pour la plupart.
set paste
ou de spécifier une clé pour lapastetoggle
option est un moyen commun pour contourner ce problème, mais le même effet peut être obtenu avecset mouse=a
comme à l'époque de Vim sait que le déluge de texte, qu'il voit est une pâte déclenchée par la souris."*p
pour coller à partir du X xlipboard. (Il fonctionne à partir de la borne de vim, trop, c'est juste que vous pourriez avoir besoin de la gvim paquet si ils sont séparés)*
est lePRIMARY
("middle-click") de vous inscrire. Le presse-papiers est+
Voici quelque chose de pas évident. Si vous avez beaucoup de coutume plugins /extensions dans votre $HOME et vous avez besoin de travailler à partir de su /sudo /... parfois, cela peut être utile.
Dans votre ~/.bashrc:
export VIMINIT=":so $HOME/.vimrc"
Dans votre ~/.vimrc:
Il permettra à votre local de plugins à charger - quelle que soit la façon dont vous l'utilisez pour changer l'utilisateur.
Vous pouvez également prendre l' *.swp fichiers de votre chemin d'accès actuel et dans ~/vimtmp (cela va dans .vimrc):
Aussi, certains mappages-je utiliser pour rendre le montage plus facile, fait ctrl+s de travail comme s'échapper et ctrl+h commutateur/l les onglets:
:!sudo tee %
,:!sudo mv % /etc
ou même lancer un shell de connexion:!sudo -i
Ctrl-n, tandis que dans le mode insertion automatique complète quel que soit le mot que vous êtes en train de saisir basé sur tous les mots qui sont en ouvert tampons. Si il n'y a plus d'un match, il vous donnera une liste de mots possibles que vous pouvez faire défiler à l'aide de ctrl-n ctrl-p.
Corrige l'indentation pour la totalité du fichier. J'ai été absent de mon fidèle
<C-a><C-i>
dans Eclipse, mais simplement de vim bien.G=gg
plus facile à taper.=%
devrait le faire aussi.Capacité à exécuter Vim sur un client/serveur basée sur les modes.
Par exemple, supposons que vous travaillez sur un projet avec beaucoup de tampons, les onglets et les autres informations enregistrées sur un fichier de session appelée session.vim.
Vous pouvez ouvrir votre session et de créer un serveur en tapant la commande suivante:
Notez que vous pouvez ouvrir des fichiers de texte normaux si vous souhaitez créer un serveur et il n'a pas à être nécessairement une session.
Maintenant, supposons que vous êtes dans un autre terminal et le besoin pour ouvrir un fichier. Si vous ouvrez régulièrement par l'émission d':
Votre fichier sera ouvert dans un autre Vim tampon, qui est difficile à faire, les interactions avec les fichiers sur votre session. Afin d'ouvrir new_file.txt dans un nouvel onglet sur votre serveur, utilisez cette commande:
Si il n'y a pas de serveur, ce fichier sera ouvert comme un fichier normal.
Depuis la prestation de ces drapeaux à chaque fois que vous voulez exécuter est très fastidieux, vous pouvez créer un alias pour la création de serveur et de client.
J'ai placé les points suivants sur mon bashrc fichier:
Vous pouvez trouver plus d'informations à ce sujet: http://vimdoc.sourceforge.net/htmldoc/remote.html
Variation de sudo écrire:
dans .vimrc
Après rechargement de vim, vous pouvez le faire "sudo enregistrer" comme
Je veux souvent pour mettre en surbrillance un mot/nom de la fonction, mais ne souhaitez pas rechercher l'instance suivante de celui-ci encore:
Souhaitez un IDE?
:make
va exécuter le fichier makefile dans le répertoire en cours, d'analyser la sortie du compilateur, vous pouvez ensuite utiliser:cn
et:cp
à l'étape à travers les erreurs du compilateur à ouvrir chaque fichier et en cherchant à le numéro de la ligne en question.:syntax on
tourne sur vim est la coloration syntaxique.HOWTO: l'Auto-complétion de Ctags lors de l'utilisation de Vim en Bash.
Pour quelqu'un d'autre qui utilise Vim et Ctags, j'ai écrit un petit auto-completer la fonction de Bash. Ajouter la ligne suivante dans votre ~/.bash_completion fichier (le créer s'il n'existe pas):
Merci à stylishpants pour ses nombreuses corrections et améliorations.
Une fois que vous redémarrez votre session Bash (ou en créer un nouveau) vous pouvez taper:
Code:
et il s'auto-terminer le tag de la même manière que pour les fichiers et les répertoires:
Code:
Je trouve que c'est très pratique quand je suis en sautant dans une rapide correction de bug.
% est aussi bon quand vous voulez diff des fichiers sur les deux copies différentes d'un projet sans porter les pinkies (de la racine de projet1):
Auto recharge le tampon courant..surtout utile lors de l'affichage des fichiers journaux et c'est presque sert la fonctionnalité de "queue" programme unix à partir de vim.
Vérifier pour les erreurs de compilation à partir de vim.
définir la makeprg variable en fonction de la langue, disons, par perl
Pour PHP
Émission ":make" exécute l'associé makeprg et affiche les erreurs de compilation/avertissements dans quickfix fenêtre et vous pouvez facilement naviguer au numéro de la ligne.
J'utilise Vim pour tout. Quand je suis en train de modifier un message e-mail, j'utilise:
gqap
(ougwap
)largement facilement et correctement reformater sur un paragraphe par paragraphe, même avec citation zone d'entrée des caractères. Afin de bénéficier de cette fonctionnalité, j'ai aussi ajouter:
-c 'set fo=tcrq' -c 'set tw=76'
à la commande pour appeler l'éditeur externe. Un ajout important serait d'ajouter " un' à fo (formatoptions) paramètre. Cela va automatiquement reformater le paragraphe que vous tapez et naviguer dans le contenu, mais peut nuire ou causer des problèmes avec errants ou impair mise en forme contenue dans le message.
autocmd FileType mail set tw=76 fo=tcrq
dans votre~/.vimrc
travaillera aussi, si vous ne pouvez pas modifier l'éditeur externe de commande.Saisie d'un caractère de sa valeur hexadécimale (mode insertion):
Mettre ceci dans votre .vimrc pour avoir une commande de moteur d'impression xml:
J'étais sûr que quelqu'un aurait posté cette déjà, mais voilà.
Prendre tout le système de compilation de vous s'il vous plaît; faire, mvn, ant, que ce soit. Dans la racine du répertoire du projet, créer un fichier de commandes que vous utilisez tout le temps, comme ceci:
mvn install
mvn clean install
... et ainsi de suite
À faire construire, mettre le curseur sur la ligne et le type !!sh. I. e. filtre de ligne; écrire un shell et de les remplacer par les résultats.
Le journal de l'remplace la ligne, prêts à défiler, de recherche, que ce soit.
Lorsque vous avez terminé l'affichage de l'historique, de type u pour annuler et vous êtes de retour à votre fichier de commandes.
makeprg
pour le bon outil que vous utilisez pour votre build (si elle ne l'est pas déjà) et ensuite utiliser:make
?:copen
va vous montrer la sortie de la compilation ainsi que vous permettant de sauter à tous les avertissements/erreurs.<C-w> c
pour fermer une fenêtre, en fait.:h ctrl-w
En raison de la latence et le manque de couleurs (j'adore les couleurs 🙂 je n'aime pas la programmation sur des machines distantes Mastic. J'ai donc développé cette astuce pour contourner ce problème. - Je l'utiliser sur Windows.
Vous aurez besoin
Configuration de l'accès distant à la machine
Configurer rsync pour faire de votre répertoire de travail accessible. Je utiliser un tunnel SSH et de n'autoriser que les connexions à partir du tunnel:
Puis commencer à rsyncd:
rsync --daemon --config=rsyncd.conf
La configuration de la machine locale
Installer rsync à partir de Cygwin. Démarrer Spectacle et de la charge de votre clé privée pour la machine distante. Si vous utilisez SSH tunneling, lancez PuTTY pour créer le tunnel. Créer un fichier de commandes push.chauve-souris dans votre répertoire de travail qui permettra de télécharger des fichiers modifiés sur l'ordinateur distant à l'aide de rsync:
SConstruct est un fichier de build pour scons. Modifier la liste des fichiers afin de les adapter à vos besoins. Remplacer localhost par le nom de la machine distante si vous n'utilisez pas de tunneling SSH.
Configuration De Vim
C'est maintenant facile. Nous allons utiliser le quickfix fonctionnalité (:faire et la liste d'erreurs), mais la compilation sera exécuté sur la machine distante. Nous avons donc besoin de définir makeprg:
Ce sera d'abord de commencer la poussée.chauve-souris de la tâche pour télécharger les fichiers, puis d'exécuter des commandes sur une machine distante en utilisant SSH (Plink du Mastic suite). La première commande change le répertoire de travail dir, puis commence à construire (j'utilise scons).
Les résultats de construire montrera bien à votre local de gVim liste des erreurs.
cmder
est beaucoup plus facile et simple, il est également livré avec son propre client sshset colorcolumn=+1
ouset cc=+1
pour vim 7.3set colorcolumn=+1,+10,+20
🙂colorcolumn
vous permet de spécifier les colonnes qui sont mises en évidence (c'est l'idéal pour vous assurer que vos lignes ne sont pas trop longs). Dans l'original de la réplique,set cc=+1
faits saillants de la colonne aprèstextwidth
. Voir le documentation pour plus d'informations.:sp %:h
- liste des répertoires /fichiers-sélecteur à l'aide de l'actuel répertoire du fichier(appartient comme un commentaire sous rampion de
cd
astuce, mais je n'ai pas de commentaire-droits encore)Juste avant de la copier et de la coller à stackoverflow:
Maintenant de copier et de coller le code.
Comme demandé dans les commentaires:
retab 1. Ceci définit la taille de la tabulation à un. Mais il va également dans le code et ajoute des onglets et des espaces ainsi que la mise en forme ne bouge pas tout le texte lui-même (c'est à dire le texte est identique après ratab).
% s/^e//g: Notez le ^I est le résultat de frapper onglet. Cette recherche tous les onglets et les remplace par un seul espace. Depuis que nous avons juste fait un retab cela ne devrait pas provoquer la mise en forme de changement, mais depuis la mise onglets dans un site web est le succès et l'échec, il est bon de les supprimer.
% s/^/ /: Remplacer le début de la ligne avec quatre espaces. Puisque vous ne pouvez pas remplacer le début de la ligne avec tout ce qu'il insère quatre espaces à la commencer de la ligne (ceci est nécessaire pour la mise en forme pour rendre le code se démarquer).
cat <file> | awk '{print " " $line}'
. Donc, essayez:w ! awk '{print " " $line}' | xclip -i
. C'est censé être quatre espaces entre les""
Lorsque l'on travaille sur un projet où le processus de construction est lente, j'ai toujours construire dans l'arrière-plan et de rediriger la sortie vers un fichier appelé les erreurs.err (quelque chose comme
make debug 2>&1 | tee errors.err
). Cela rend-il possible pour moi de continuer à éditer ou à examiner le code source pendant le processus de génération. Quand il est prêt (à l'aide de pynotify sur GTK pour m'informer qu'il est complet), je peux regarder le résultat dans vim à l'aide de quickfix. Commencer par l'émission d' :cf[ile] qui lit le fichier d'erreur et passe à la première erreur. Personnellement, j'aime utiliser cwindow pour obtenir le construire résultat dans une fenêtre séparée.Quelques utiles:
Mon préféré: Ctrl + n MOT de la fin!
Pour la fabrication de vim un peu plus comme une IDE de l'éditeur:
J'aime :commande ls.
:ls
la liste de tous les cours d'ouverture des tampons.:be
ouvre un fichier dans un nouveau tampon,:bn
va à la prochaine tampon,:bp
à la précédente,:b filename
ouvre tampon de nom de fichier (il s'est auto-termine trop). les tampons sont distincts des onglets, je me suis dit sont plus semblables à des points de vue.Réutilisation
Motions à mélanger avec d'autres commandes, plus ici.
Utilisez vos outils favoris dans Vim.
Répéter en mode visuel, puissant lorsqu'il est combiné avec des conseils ci-dessus.
Il sera très utile si nous voulons générer des numéros séquentiels dans vim
Disons que si nous voulons insérer des lignes 1 à 10 avec les nombres de 1 à 10 [comme "1" sur la 1re ligne,"2" sur la 2e ligne..]
insérez le "0" sur la première ligne et copier la ligne et passé 9 fois
De sorte que toutes les lignes affichera "0".
Exécuter les opérations suivantes à commande Ex
En mode insertion, ctrl+x, ctrl+p sera complète (avec le menu de complétions possibles si vous le souhaitez) le courant de longue identifiant que vous tapez.
Utilisez la touche droite de la souris pour basculer le mode d'insertion dans gVim avec les paramètres suivants
dans ~/.gvimrc :
Remplacer tous les
Donner un pour remplacer tous 🙂
a
, il suffit de retirer lec
.c
signifie confirmer le remplacementNi de ce qui suit est vraiment irréductibles, mais je trouve qu'il est extrêmement utile.
Trivial liaisons, mais je ne peux pas vivre sans. Il permet hjkl style de mouvement en mode insertion (à l'aide de la touche ctrl). En mode normal: ctrl-k/j parchemins de la moitié d'un écran vers le haut/vers le bas et ctrl-l/h va à la prochaine/précédente de la mémoire tampon. Le µ et ù mappages sont surtout pour un AZERTY-clavier et passer à la suivante/précédente erreur.
Une petite fonction que j'ai écrit pour mettre en évidence les fonctions, les variables globales, macro, les structures et les typedefs. (Peut être lent sur de très gros fichiers). Chaque type obtient différentes mises en relief (voir ":help group-name" pour avoir une idée de votre colortheme les paramètres)
Utilisation: enregistrer le fichier avec ww (par défaut "\ww"). Vous avez besoin de ctags pour cela.
J'ai l'habitude d'écrire beaucoup de code et de fonctions, et je n'aime pas écrire des prototypes pour eux. J'ai donc fait une fonction pour générer une liste de prototypes dans un style C sourcefile. Il est disponible en deux versions: l'une qui supprime le paramètre formel du nom et de celui qui la préserve.
Je viens d'actualiser l'ensemble de la liste à chaque fois que j'ai besoin de mettre à jour les prototypes. Il évite de synchroniser les prototypes et les définitions de fonction. Aussi besoin de ctags.
J'ai recueilli ces au fil des ans.
Créer une fonction pour exécuter le tampon courant à l'aide de son arborescence (en supposant que l'on est ensemble) et de l'appeler avec ctrl-x.
carte macros
Je préfère souvent s'avérer utile à la volée définir un mappage de touches seulement, comme on pourrait le définir une macro. Le twist est ici, que la cartographie est récursive et est exécuté jusqu'à ce qu'il échoue.
Exemple:
Donne:
Juste un exemple stupide :).
Je suis tout à fait conscient de tous les inconvénients - il se trouve que j'ai trouvé ça plutôt utile dans certaines occasions. Il peut aussi être intéressant de regarder au travail ;).
Dans le but de copier un texte à partir de Vim à votre presse-papiers pour les autres applications à utiliser, sélectionnez le texte que vous souhaitez copier en mode visuel, puis appuyez sur "+y. De cette façon, vous pouvez facilement coller votre texte dans d'autres applications.
Ceci est particulièrement utile, si vous avez découpé la fenêtre verticalement et vous souhaitez copier quelque chose à partir de la fenêtre de droite. À l'aide de set mouse=r, ne sera pas vous aider avec cette situation, car il sera tout sélectionner sur la gauche de la fenêtre.
Noter que votre vim doit être compilé avec xterm soutien.
vim --version | grep clipboard
et vous devriez avoir les arguments suivants:+clipboard
et+xterm_clipboard
.Essayez d'utiliser
perltidy
pour la mise en forme par=
normal en mode de commandeCertains de mes must-haves sont:
cscope + ctags + vim, qui peut être trouvé sur le web.
Certaines abréviations pour rapidement commencer un nouveau code des fichiers tels que:
Par exemple cpph va insérer un squelette de base d'un main.cc fichier
Il y a aussi mon mappage des touches de fonction:
Dans ce cas, mon F1 est mappé à mettre le curseur sur la prochaine erreur qui doit être corrigée pour un code source de la migration.
Cette carte rendrait _ citation d'une chaîne
Mappages de faire des mouvements de fonctionner sur le courant de ligne d'écran en mode cyclique. J'ai découvert cela dans un commentaire pour Vim astuce il y a quelques temps, et il s'est avéré très pratique.
Le mien est à l'aide de macros à la place de recherches combinant une macro avec le mode visuel est parfois plus efficace.
par cette fil
De préfixe d'un ensemble de lignes-je utiliser une de deux approches différentes:
Une approche est le bloc sélectionnez (mentionné par sth). En général, vous pouvez sélectionner une zone rectangulaire avec ctrl-V suivie par curseur-mouvement. Une fois que vous avez mis en évidence un rectangle, en appuyant sur maj-je insérer des caractères sur le côté gauche du rectangle, ou maj-Une volonté de les ajouter sur le côté droit du rectangle. Vous pouvez donc utiliser cette technique pour en faire un rectangle qui comprend la colonne la plus à gauche des lignes de vous voulez préfixe, appuyez sur maj-je, tapez le préfixe, puis appuyez sur escape.
L'autre approche consiste à utiliser une substitution (comme mentionné par Brian Agnew). De Brian de substitution des répercussions sur l'ensemble du fichier (le % dans la commande signifie "toutes les lignes"). Pour affecter quelques lignes l'approche la plus simple est de taper shift-V (qui permet une visualisation de la ligne de mode) alors que sur la première/dernière ligne, puis passer à la dernière/première ligne. Ensuite, tapez:
:s/^/VOTRE PRÉFIXE/
Le ^ est une regex (dans ce cas, le début de la ligne). En tapant ceci dans visual mode en ligne, vous verrez "< " > insérer avant le s automatiquement. Cela signifie que la gamme de la substitution sera la sélection visuelle.
Autre conseil: si votre préfixe contient des barres obliques, vous pouvez soit leur échapper avec une barre oblique inverse, ou vous pouvez utiliser un autre caractère de ponctuation comme séparateur dans la commande. Par exemple, pour ajouter C++ commentaires, j'ai l'habitude d'écrire:
:s:^://:
Pour l'ajout d'un suffixe à l'approche par substitution est généralement plus facile si l'une de vos lignes sont exactement de la même longueur. Suffit d'utiliser $ pour le modèle au lieu de ^ et de votre chaîne sera ajoutée au lieu de pré-entrée.
Si vous souhaitez ajouter un préfixe et d'un suffixe en même temps, vous pouvez faire quelque chose comme ceci:
:s/.*/PRÉFIXE & SUFFIXE/
L' .* correspond à l'ensemble de la ligne. Le & dans le remplacement met le texte correspondant (toute la ligne) de retour, mais maintenant ça va avoir votre préfixe et le suffixe ajouté.
BTW: lors de commenter le code, vous aurez probablement envie de dé-commenter plus tard. Vous pouvez utiliser visual-bloc (ctrl-V) pour sélectionner les barres obliques, puis appuyez sur d pour supprimer, ou vous pouvez utiliser une substitution (probablement avec un visuel de la ligne de sélection, faite avec shift-V) pour retirer le premier des barres obliques comme ceci:
:s:://::
Ma recette préférée pour basculer entre les fenêtres:
<c-w><left>
ou<c-w><right>
... c'est pas terrible.J'aimerais organiser certains de mes propres fichiers de configuration dans
après-directory
. C'est surtout utile pourftplugin
.Vous pouvez éviter d'écrire une longue liste de augroup dans votre .fichiers vimrc au lieu de séparer les fichiers pour chaque type.
Mais, évidemment .vim/ftplugin répertoire de faire la même chose que .vim/après/ftplugin, mais je préfère la quitter .vim répertoire de vim plugins.