Εσοχές σε πολλές γραμμές κώδικα, με το kate (kde)

Θέλω να προσθέσω ένα κομμάτι κώδικα που έχω αντιογράψει σε έναν μεγαλύτερο κώδικα. όταν πηγαίνω στη γραμμή που θέλω, πατάω Επικόλληση αλλά επικολλάται χωρίς εσοχή η πρώτη γραμμή ενώ οι υπόλοιπες έχουν τις εσοχές τους σε αντιστοιχία με αυτή την πρώτη γραμμή. Εγώ θέλω η πρώτη αυτή γραμμή (του αντιγραμένου κομματιού) να είναι 4 διαστήματα πιο μέσα. Πράγμα που σημαίνει ότι σε αντιστοιχία πρέπει να πάνε και οι άλλες γραμμές 4 πιο μέσα. Πως να το κάνω μαζικά αυτό για να μην το κάνω μία μία γραμμή, αφού είναι πάρα πολλές; Εκτός από το Kate με ενδιαφέρει και για τον pluma του mate.

3 «Μου αρέσει»

Εάν εισάγεις το κενό που θέλεις πριν την επικόλληση στην πρώτη γραμμή, δεν επικολλάται όπως θέλεις?
Χρησιμοποίησε και τον συνδυασμό Ctrl + I για να μετακινήσεις μαζικά κομμάτια κώδικα.
Δες επίσης τις επιλογές που έχεις στο Tools > Indentation.

1 «Μου αρέσει»

Δεν πετυχαίνει. Ρώτησα και το βλαμένο και μου είπε να κάνω νέο αρχείο και στα εργαλεία να επιλέξω το κανονικό κείμενο. Εγώ επέλεξα και αυτό αλλά και το Στυλ xml. Τίποτα. Μου τοποθετεί εκεί που θέλω μονο την πρώτη γραμμή αφού έχω βάλει στο σημείο που θέλω το δρομέα και από κάτω δεν τηρεί την αντιστοιχία. Το έκανα και με επικόλληση και με μεσαίο κλικ και τίποτα. Να ο κώδικας:

    <Profile xmlns="http://schemas.android.com/apk/res/android">
  <id>1</id>
  <name>Spotify Voice Command</name>
  <enabled>true</enabled>
  <task>
    <id>1</id>
    <name>Spotify Query</name>
    <priority>5</priority>
    <ActionIntent>
      <Action>net.dinglisch.android.tasker.ActionCodes.RUN_SCRIPT</Action>
      <Cat/>
      <Mime/>
      <Data/>
      <Extra/>
      <ExtraType/>
      <Source/>
      <Flags/>
    </ActionIntent>
    <Priority>5</Priority>
  </task>
  <intent>
    <Action>net.dinglisch.android.tasker.ACTION_TASK</Action>
    <Cat/>
    <Mime/>
    <Data/>
    <Extra>
      <net.dinglisch.android.tasker.extras.NAME>Spotify Query</net.dinglisch.android.tasker.extras.NAME>
      <net.dinglisch.android.tasker.extras.NAME-type>java.lang.String</net.dinglisch.android.tasker.extras.NAME-type>
      <net.dinglisch.android.tasker.extras.IGNORE_RETURN_VALUE>true</net.dinglisch.android.tasker.extras.IGNORE_RETURN_VALUE>
      <net.dinglisch.android.tasker.extras.IGNORE_RETURN_VALUE-type>java.lang.Boolean</net.dinglisch.android.tasker.extras.IGNORE_RETURN_VALUE-type>
      <net.dinglisch.android.tasker.extras.RESTART_TASK>false</net.dinglisch.android.tasker.extras.RESTART_TASK>
      <net.dinglisch.android.tasker.extras.RESTART_TASK-type>java.lang.Boolean</net.dinglisch.android.tasker.extras.RESTART_TASK-type>
      <net.dinglisch.android.tasker.extras.RESTART_TIMER>false</net.dinglisch.android.tasker.extras.RESTART_TIMER>
      <net.dinglisch.android.tasker.extras.RESTART_TIMER-type>java.lang.Boolean</net.dinglisch.android.tasker.extras.RESTART_TIMER-type>
      <net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_NAME>Spotify</net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_NAME>
      <net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_NAME-type>java.lang.String</net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_NAME-type>
      <net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_PACKAGE>com.spotify.music</net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_PACKAGE>
      <net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_PACKAGE-type>java.lang.String</net.dinglisch.android.tasker.extras.SETTINGS_LAUNCH_PACKAGE-type>
      <net.dinglisch.android.tasker.RELEVANT_VARIABLES>&lt;StringArray sr="val" &gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;%avcomm()
All recognized commands
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES1&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2&gt;%avcomms()
All recognized commands
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES2&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3&gt;%avcommsnofilter()
All recognized commands without filter
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES3&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4&gt;%avsource
Source of the Voice Command
Can be normal, continuous, test, or googlenow&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES4&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5&gt;%avword()
Word Array
&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES5&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES6&gt;%regexgroups()
Regex Groups
Regex Groups&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES6&gt;&lt;_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES7&gt;%regexmatch
Regex Match
Regex Match&lt;/_array_net.dinglisch.android.tasker.RELEVANT_VARIABLES7&gt;&lt;/StringArray&gt;</net.dinglisch.android.tasker.RELEVANT_VARIABLES>
      <net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>[Ljava.lang.String;</net.dinglisch.android.tasker.RELEVANT_VARIABLES-type>
      <net.dinglisch.android.tasker.extras.REQUESTED_TIMEOUT>0</net.dinglisch.android.tasker.extras.REQUESTED_TIMEOUT>
      <net.dinglisch.android.tasker.extras.REQUESTED_TIMEOUT-type>java.lang.Integer</net.dinglisch.android.tasker.extras.REQUESTED_TIMEOUT-type>
      <net.dinglisch.android.tasker.extras.RUN_COUNT>0</net.dinglisch.android.tasker.extras.RUN_COUNT>
      <net.dinglisch.android.tasker.extras.RUN_COUNT-type>java.lang.Integer</net.dinglisch.android.tasker.extras.RUN_COUNT-type>
      <net.dinglisch.android.tasker.extras.RUN_LIMIT>5</net.dinglisch.android.tasker.extras.RUN_LIMIT>
      <net.dinglisch.android.tasker.extras.RUN_LIMIT-type>java.lang.Integer</net.dinglisch.android.tasker.extras.RUN_LIMIT-type>
      <net.dinglisch.android.tasker.extras.SUPPRESS_NOTIFICATION>false</net.dinglisch.android.tasker.extras.SUPPRESS_NOTIFICATION>
      <net.dinglisch.android.tasker.extras.SUPPRESS_NOTIFICATION-type>java.lang.Boolean</net.dinglisch.android.tasker.extras.SUPPRESS_NOTIFICATION-type>
      <net.dinglisch.android.tasker.extras.VOID_RESULT>false</net.dinglisch.android.tasker.extras.VOID_RESULT>
      <net.dinglisch.android.tasker.extras.VOID_RESULT-type>java.lang.Boolean</net.dinglisch.android.tasker.extras.VOID_RESULT-type>
    </Extra>
  </intent>
</Profile>

Και να, ούτε εδώ το έκανε. Η δεύτερη γραμμή που λέει ```
1

πρέπει να είναι δεξιότερα από το <Profile>

Πιάσε ολόκληρο τον κώδικα από την 2η γραμμή και κάτω και πάτα 2 -3 φορές Ctrl + Ι (i κεφαλαίο) να τον μετακινήσεις όσο μέσα θέλεις.

3 «Μου αρέσει»

Αυτό ήταν. Ευχαριστώ

2 «Μου αρέσει»

Για καλύτερη μορφοποίηση κώδικα συνιστώ κάποιο επαγγελματικό εργαλείο. Η καλύτερη επιλογή είναι το vscode καθώς υποστηρίζει language servers [1] και έχει πρόσθετα για οτιδήποτε μπορείς να φανταστείς [2]. Και αυτά δίνουν καλύτερο αποτέλεσμα.

Την πρώτη φορά που θα ανοίξεις ένα αρχείο XML θα σου προτείνει να κατεβάσεις ένα πρόσθετο. Όμοιά πχ αν για κάποιο αρχείο bash θα σου προτείνει να κατεβάσεις στο shellfmt και το shellcheck. Ενεργοποιείς και την επιλογή ‘Format on save’.

Εναλλακτικά υπάρχει το sublime text, το οποίο όμως είναι λίγο δυσκολότερο να το στήσεις.

[1] Είναι ένα πρωτόκολλο επικοινωνίας ανάμεσα σε μια γλώσσα προγραμματισμού και ένα IDE. Με αυτό το IDE γνωρίζει τη σύνταξη της κάθε γλώσσας, τη δομή της και επιτρέπει διάφορα refactoring όπως πχ αλλαγή ονόματος μιας μεταβλητής. Χωρίς αυτήν την τεχνολογία κάθε ξεχωριστό IDE τα υλοποιούσε μόνο του για κάθε γλώσσα, συχνά με μέτρια αποτελέσματα.

[2] Για παράδειγμα έχω εγκατεστημένα πρόσθετα για ron, rhai, για gltf!!, που δεν πίστευα πως υπάρχουν. Ακόμα και για τη γλώσσα του kmonad (κάτι που μοιάζει με lisp για να ρυθμίσεις το πληκτρολόγιο πραγματικά στα μέτρα σου) έχει πρόσθετο.