Manière la plus rapide de déplacer le bloc de code vers une ligne spécifique

8

Supposons que vous ayez du code sur les lignes 4, 5, 6. Ensuite, vous souhaitez déplacer ce bloc de code sur la ligne de point de départ 9 tout en supprimant également les lignes 4, 5, 6.

Quel est le moyen le plus rapide, c'est-à-dire le moins de touches, pour y parvenir? Une fonction personnalisée serait-elle mieux adaptée?

Edgar Aroutiounian
la source

Réponses:

6

Commencer au début de la ligne 4 ( ESC 4 ESC g gou M-4 M-g M-gpour y aller), C-3 C-k C-2 C-n C-y(ou ESC 3 C-k down down C-ysi vous n'aimez pas maintenir les modificateurs enfoncés) le fera.

Si vous ne voulez pas faire l'arithmétique dans votre tête, mais sélectionnez plutôt des lignes visuellement, alors

  • Déplacer au début de la zone pour se déplacer
  • C-SPC mettre la marque
  • Descendez au début de la première ligne pour garder
  • C-w couper
  • Descendez à l'endroit où vous souhaitez insérer le texte coupé
  • C-y coller

Je ne pense pas qu'il y ait moyen de raccourcir cela, sauf si vous êtes prêt à perdre une certaine flexibilité (par exemple, si vous voulez souvent déplacer un bloc d'exactement trois lignes). Vous devez fournir trois emplacements: le début du bloc à déplacer, la fin du bloc à déplacer et la destination. Dans les séquences ci-dessus, il y a une seule touche à chaque emplacement, qui est aussi faible que possible.

Gilles 'SO- arrête d'être méchant'
la source
8

Si la distance n'est pas grande, vous pouvez utiliser move-text :

entrez la description de l'image ici

En termes de touches, pour moi c'est:

  1. Choisissez une région:

    C-SPCC-nC-nC-n

  2. Déplacer la région:

    H-S-nH-S-nH-S-n

( move-text-downest lié à H-S-n)

welldan97
la source
Vous pouvez également fournir un argument numérique nà move-text-downet move-text-up. Cela raccourcit l'étape (2) à M-3 H-S-n.
itsjeyd
3

Vous pouvez utiliser expand-region pour marquer le bloc, s'il s'agit d'une unité sémantique, comme une fonction (le site Web du package explique cela plus en détail). Ensuite, déplacez-le comme l'explique l'autre réponse. Selon l'endroit où vous vous trouvez dans le bloc, une seule touche peut marquer le tout.

rlazo
la source
Pouvez-vous développer davantage sur ce sujet? Que voulez-vous dire un vrai bloc? Comme un bloc fonctionnel?
Edgar Aroutiounian
Oui, le terme utilisé dans le package est "unités sémantiques" qui peuvent être mot, ligne, bloc de code, fonction, classe, fichier entier. J'ai modifié la réponse pour inclure un lien vers le package qui explique mieux cela.
rlazo
2

Si vous utilisez evil-mode, vous pouvez également utiliser une excommande: :4,6m9(qui moves lignes 4à 6la ligne 9).

shosti
la source
Je n'ai pas l'intention de mentionner une fonctionnalité exotique comme l'émulation vi quand elle n'a rien à voir avec la question.
Gilles 'SO- arrête d'être méchant'
2
Gilles: evil-moden'est pas exactement obscur - il a près de 18 000 téléchargements sur melpa. Une autre réponse utilisée expand-region, qui est également un package externe. Pour un site de questions / réponses, il est probablement bon d'inclure plusieurs façons d'accomplir la même chose avec différents packages (bien qu'il puisse être utile de proposer des directives).
shosti