Jak dodać numery linii do zakresu linii w Vimie?

Jak mogę dodać numery linii do zakresu linii w pliku otwartym w Vimie? Nie tak jak w :set nu - to po prostu wyświetla numery linii - ale czy rzeczywiście mają być dołączone do każdej linii w pliku?

Author: ib., 2008-10-31

7 answers

Z

:%s/^/\=line('.')/

EDIT: podsumowując komentarze.

To polecenie można dowolnie zmieniać.


Załóżmy, że chcesz dodać liczby przed liniami z wizualnego zaznaczenia (V + przesuń) i chcesz, aby numeracja zaczynała się od 42.

:'<,'>s/^/\=(line('.')-line("'<")+42)/

Jeśli chcesz dodać łańcuch pomiędzy liczbą a starym tekstem z linii, po prostu połącz go (z . w VimL) do wyrażenia liczby:

:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/

Jeśli potrzebujesz tego aby posortować jako tekst, możesz zerować wyniki, co można zrobić za pomocą printf dla 0001, 0002... zamiast 1, 2... eg:

:%s/^/\=printf('%04d', line('.'))/

W każdym razie, jeśli chcesz uzyskać więcej informacji, po prostu otwórz vim help: :h :s i postępuj zgodnie z linkami (|subreplace-special|, ..., |submatch()|)

 112
Author: Luc Hermitte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 01:13:26

cat -n dodaje numery linii do swojego wejścia. Możesz przesłać bieżący plik do cat -n i zastąpić bieżący bufor tym, co drukuje na standardowe wyjście. Na szczęście to rozwiązanie jest mniej niż 10 znaków w Vimie:

 :%!cat -n

Lub, jeśli chcesz tylko podwyzkę, wybierz wizualnie obszar i wpisz to:

 :!cat -n

To automatycznie wprowadzi wizualne znaczniki zaznaczenia i będzie wyglądać tak po wpisaniu:

 :'<,'>!cat -n

Aby wymazać numery linii, I zaleca się użycie control-v, które pozwoli Ci wizualnie wybrać prostokąt, możesz następnie usunąć ten prostokąt za pomocą x.

 33
Author: Jerub,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-31 07:10:03

W systemie GNU: z zewnętrznym nl binarnym:

:%!nl
 24
Author: Martin v. Löwis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-11 14:38:07

W uniksopodobnym środowisku, możesz użyć cat lub awk do wygenerowania numeru linii w łatwy sposób, ponieważ vim ma przyjazny interfejs z powłoką, więc wszystko działa w Vimie tak samo jak w powłokach.
From Vim Tip28 :

:%!cat -n

Lub

:%!awk '{print NR,$0}'

Ale jeśli używasz Vima w MS-DOS, win9x, win2000, stracisz ten zestaw narzędzi. oto bardzo prosty sposób na zarchiwizowanie tego tylko przez Vima:

fu! LineIt()
  exe ":s/^/".line(".")."/"
endf

Lub, Sekwencja skomponowana alfabetem jest tak prosta jak powyżej:

exe "s/^/".nr2char(line("."))."/" 

Możesz również użyć subst:

:g/^/exe ":s/^/".line(".")."^I/"

Możesz również drukować tylko wiersze bez dodawania ich do pliku:

" czasami przydałoby się edytowanie dużych plików źródłowych, aby wydrukować numery linii na papierze.
Aby to zrobić, możesz użyć opcji :set printoptions=number:y, aby aktywować i :set printoptions=number:n, aby dezaktywować tę funkcję.
Jeśli numer linii powinien być wydrukowany zawsze, umieść linię set printoptions=number:y w vimrc."

 6
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 22:06:26

Najpierw możesz usunąć istniejące numery linii, jeśli potrzebujesz:

:%s/^[0-9]*//

Następnie możesz dodać numery linii. NR odnosi się do bieżącego numeru linii zaczynającego się od jedynki, więc możesz policzyć na nim, aby uzyskać pożądaną numerację. Poniższe polecenie daje Ci czterocyfrowe numery linii:

:%!awk '{print 1000+NR*10,$0}'
 4
Author: Lance Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-13 14:34:14

Wtyczka "VisIncr" jest dobra do wstawiania kolumn rosnących liczb w ogóle (lub liter, dat, cyfr rzymskich itp.). Możesz kontrolować format liczb, wypełnienia i tak dalej. Wstaw więc "1" przed każdą linią (za pomocą :s LUB :g lub visual-block insert), podświetl tę kolumnę w trybie Visual-block i uruchom jedno z poleceń z wtyczki.

 3
Author: Brian Carper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-02 00:09:35

Jeśli ktoś chce umieścić tabulator (lub spacje) po wstawieniu numerów linii za pomocą tej doskonałej odpowiedzi, oto sposób. Po przejściu w tryb ucieczki, do:

:%s/^/\=line('.').'    '/

^ oznacza początek linii i {[3] } jest dyrektywą zastępczą. Mówimy więc, że umieść numer linii na początku każdej linii i dodaj do niej 4 spacje, a następnie umieść zawartość linii przed podstawieniem i zrób to dla wszystkich linii w pliku.

To automatycznie go zastąpi. Alternatywnie, jeśli chcesz, aby Komenda poprosiła cię o potwierdzenie, wykonaj:

:%s/^/\=line('.').'    '/igc

P. s: power of vim :)

 0
Author: kmario23,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-08 10:25:33