J'utilise un exemple de code javascript:
1 var a = 1;
2 var b = |{};
Le curseur est à la position de |
(sur le caractère "{" lorsque la forme du curseur est un bloc), je découvre que je veux a
qu'on lui attribue un objet, donc je veux le modifier comme ci-dessous:
1 var a = {};
Je veux donc savoir quand le curseur est sur "{", comment supprimer rapidement tout le contenu avant "{" jusqu'au blanc après le signe "=" à la ligne 1?
Dans d'autres éditeurs normaux, je vais simplement appuyer sur la touche de retour arrière pour supprimer le code. Mais je ne sais pas comment y parvenir en vim.
insert-mode
normal-mode
Aaron Shen
la source
la source
i
et utiliser la touche de retour arrière. Aucun corps ne vous tirera dessus pour ça. Je pense.eol
alors backspace va supprimer les sauts de ligne. Vous devrez égalementstart
être inclus dans le paramètre. (Voir:help backspace
). N'utilisez pas cette méthode! Il existe plusieurs méthodes beaucoup plus rapides détaillées dans les réponses ci-dessous.Réponses:
Je ne sais pas si je comprends parfaitement la question, mais si vous vouliez supprimer jusqu'à ce que vous ayez seulement
var a = {};
, vous pouvez, à partir de la position du curseur, utiliserd?1Enterdprend une motion, et vous pouvez lui donner un modèle de recherche avec /pour une recherche en avant ou ?pour une recherche en arrière.
Voici un petit gif démontrant ceci:
la source
Enter
après avoir tapéd?1
.Si vous utilisez vim (et non vi classique), dans votre exemple, vous pouvez le faire
vkd
(ouvkx
).v
le mettra en mode «visuel» (sélectionner)k
montera d'une ligne pour placer le curseur sur le «1», en sélectionnant la partie que vous souhaitez supprimerd
oux
supprimera la sélectionla source
Supprimer vers le haut
Pour cet exemple spécifique,
dgk
est l'un des moyens les plus rapides de le faire.La
d
commande, comme Akshay l'a expliqué , peut être suivie d'un mouvement, supprimant tous les caractères entre le point de départ du curseur et le point de départ du mouvement.Dans votre code, vous souhaitez supprimer tout ce qui se trouve entre la position du curseur et la même colonne une ligne plus haut, afin de déplacer le curseur vers le haut avec le
gk
mouvement (qui, lorsqu'il est utilisé avec un opérateur, n'est pas dans le sens des lignes) atteindra votre objectif.EDIT: BobH souligne dans les commentaires que cette méthode ne fonctionne que lorsqu'elle
'wrap'
est définie. En tant que tel, à moins que vous n'ayez toujours un ensemble d'enveloppement, vous feriez probablement mieux d'utiliserdvk
ouvkd
, comme suggéré par les autres réponses sur cette page.Supprimer les mots en arrière
Vous pouvez également utiliser:
d5b
oud4B
, qui supprimera respectivement 5 mots ou 4 mots en arrière. (1;
est un MOT, mais deux mots normaux).la source
vim -u NONE -U NONE
et il supprime les deux lignes.gk
tant que caractère nécessite apparemment:set wrap
(un peu cryptiquement). Je ne pouvais pas comprendre pourquoi cela fonctionnait apparemment pour tout le monde mais pas pour moi, alors que l'aidegk
semblait également impliquer que cela devrait fonctionner. Le seul indice était que la signification principale de celagk
avait à voir avec les lignes enveloppées. Une fois que j'ai essayé de mettre le wrap (un peu sur un coup de tête), le tour est joué.Je ne peux pas encore commenter, je dois donc faire une nouvelle réponse. Les clés d kfournies par Rich ne fonctionnent pas pour moi même lorsque j'utilise l'option nocompatible. Une raison pourrait être que la motion kest considérée ligne par ligne par vim, auquel cas les deux lignes sont supprimées. De
:help d
:Il montre également le remède: Utilisez dvkpour forcer le mouvement à être caractère. Cela fait l'affaire pour moi.
Je ne connaissais pas o_v auparavant, alors voici
:help o_v
:la source