Πώς να αντικαταστήσετε έναν χαρακτήρα με μια νέα γραμμή στον Vim

Προσπαθώ να αντικαταστήσω κάθε , στο τρέχον αρχείο με μια νέα γραμμή:

:%s/,/\n/g 

Αλλά εισάγει κάτι που μοιάζει με ^@ αντί για πραγματική νέα γραμμή. Το αρχείο δεν είναι σε λειτουργία DOS ή οτιδήποτε άλλο.

Τι πρέπει να κάνω;

Αν είστε περίεργοι, όπως εγώ, ελέγξτε και την ερώτηση Γιατί το \r είναι μια νέα γραμμή για τον Vim;.

Λύση

Χρησιμοποιήστε \r αντί για \n.

Η αντικατάσταση με \n εισάγει έναν μηδενικό χαρακτήρα στο κείμενο. Για να λάβετε μια νέα γραμμή, χρησιμοποιήστε \r. Ωστόσο, όταν αναζητάτε μια νέα γραμμή, εξακολουθείτε να χρησιμοποιείτε το \n. Αυτή η ασυμμετρία οφείλεται στο γεγονός ότι το \n και το \r κάνουν ελαφρώς διαφορετικά πράγματα:

Το \n ταιριάζει με το τέλος της γραμμής (newline), ενώ το \r ταιριάζει με το carriage return. Από την άλλη πλευρά, στις αντικαταστάσεις το \n εισάγει έναν μηδενικό χαρακτήρα, ενώ το \r εισάγει μια νέα γραμμή (ακριβέστερα, αντιμετωπίζεται ως η είσοδος ). Ακολουθεί ένα μικρό, μη διαδραστικό παράδειγμα για να το δείξουμε αυτό, χρησιμοποιώντας τη δυνατότητα γραμμής εντολών του Vim (με άλλα λόγια, μπορείτε να αντιγράψετε και να επικολλήσετε τα παρακάτω σε ένα τερματικό για να το εκτελέσετε). Το xxd δείχνει ένα hexdump του αρχείου που προκύπτει.

echo bar > test
(echo 'Before:'; xxd test) > output.txt
vim test '+s/b/\n/' '+s/a/\r/' +wq
(echo 'After:'; xxd test) >> output.txt
more output.txt
Σχόλια (16)

Πρέπει να χρησιμοποιήσετε

:%s/,/^M/g

Για να λάβετε τον χαρακτήρα ^M, πατήστε Ctrl

Σχόλια (1)

Το \r μπορεί να κάνει τη δουλειά εδώ για εσάς.

Σχόλια (0)