Czy istnieje polecenie ustalenia długości najdłuższej linii w vim? I dołączyć tę długość na początku pliku?najdłuższa linia w vimie?
Odpowiedz
Polecenie wc zawiera polecenie -L --max-line-length, które wyświetla maksymalną długość linii pliku. Zobacz gnu man wc. FreeBSd wc ma również -L, ale nie - długość -max, patrz freebsd man wc.
Jak korzystać z nich z vim? Polecenie:
:%!wc -L
Odfiltruje otwarty plik przez wc -L i sprawi, że zawartość pliku będzie miała maksymalną długość linii.
Aby zachować zawartość pliku i umieścić maksymalną długość wiersza w pierwszym wierszu zrobić:
:%yank
:%!wc -L
:put
Zamiast WC, Find length of longest line - awk bash opisuje jak używać awk znaleźć długość najdłuższej linii.
Ok, teraz dla czystego rozwiązania Vima. Jestem trochę nowy w pisaniu skryptów, ale tu idzie. Poniżej znajduje się funkcja FilterLongestLineLength z textfilter.
function! PrependLongestLineLength ()
let maxlength = 0
let linenumber = 1
while linenumber <= line("$")
exe ":".linenumber
let linelength = virtcol("$")
if maxlength < linelength
let maxlength = linelength
endif
let linenumber = linenumber+1
endwhile
exe ':0'
exe 'normal O'
exe 'normal 0C'.maxlength
endfunction
command PrependLongestLineLength call PrependLongestLineLength()
Umieść ten kod w pliku .vim (lub .vimrc) i: źródło pliku. Następnie użyj nowego polecenia:
:PrependLongestLineLength
Dzięki, ustalenie tego było fajne.
Byłem na czymś w rodzaju! Awk '{print (length ($ 0))}'
Nawet jeśli rozwiązanie Jonathana (pre-vim-7) jest nieco skomplikowane, ma rację używając 'virtcol()', tabulatory nie będą liczone jako '1'. Obawiam się, że wszystkie inne rozwiązania oparte na wc, awk, perlu itd. Nie dadzą prawidłowych odpowiedzi. –
Jeśli pracujesz z tablic wartości rozszerzonych, prosty
:0put=max(map(getline(1,'$'), 'len(v:val)'))
wystarczy.
W przeciwnym razie, myślę, że będziemy potrzebować następujące (które można znaleźć jako ostatni przykład w :h virtcol()
minus 1):
0put=max(map(range(1, line('$')), "virtcol([v:val, '$'])-1"))
Nie nazwałbym tej linii "prostą". Działa, ale nie ma skarg. – sleske
: wc -l%
zamiast
:%! wc -L
Aby dołączyć tę długość na początku pliku:
: 0r! wc -L% | cut -d '' -f1
Zaletą '%! Wc -L' jest to, że działa na niezapisanych lub nienazwanych buforach. – wchargin
- 1. Najdłuższa wspólna podsekwencja
- 2. Autoindentowanie Haskella w Vimie
- 3. Najdłuższa ścieżka acykliczna w ukierunkowanym nieważonym grafie
- 4. efektywna najdłuższa biblioteka algorytmów wspólnego podciągania?
- 5. Jak szybko połączyć dwie linie w Vimie?
- 6. Jak sortować linie UTF-8 w Vimie?
- 7. Jak odświeżyć taglistę w vimie?
- 8. Jak usunąć słowo w vimie?
- 9. Wybrać między stronami w Vimie?
- 10. linia przerywana w Jfreechart
- 11. nowa linia w pisku
- 12. Nowa linia w Node.js
- 13. losowa linia w pliku
- 14. matplotlib linia 2d linia, działka = przecinek oznaczający
- 15. jak zmienić^M na nową linię w vimie?
- 16. Jak zerwać cały blok w Vimie?
- 17. Jak usunąć wiele buforów w Vimie?
- 18. Jak mogę wygenerować identyfikator GUID w Vimie?
- 19. Jak wyszukiwać pełne słowa w vimie?
- 20. Jak powtórzyć ostatnie n zmian w Vimie?
- 21. Jak zmienić rozmiar tabulatora w Vimie?
- 22. Rozszerzenie CamelCase w Vimie jak Intellij Idea?
- 23. Wklej w Vimie bez przesuwania kursora
- 24. Jak skutecznie zarządzać zakładkami/buforami w vimie?
- 25. Wyróżnij wyszukiwania w Vimie, ale nie podmianach?
- 26. Podświetlanie składni dla .gitignore w Vimie?
- 27. Jak mogę zawinąć tekst w Vimie? speak
- 28. Dlaczego \% (\) jest szybsze niż \ (\) w Vimie?
- 29. Zapisywanie często używanych wzorów regex w Vimie?
- 30. W Vimie jak przeskakiwać pomiędzy dwoma plikami
Czy trzeba to zrobić w Vimie? Pytam, ponieważ jest to dość konkretna rzecz, którą chciałbym zrobić i prawdopodobnie byłoby szybciej utworzyć skrypt Python/Perl/Ruby, aby to zrobić, jeśli potrzebujesz tego na wielu plikach. – ZoogieZork
To brzmi jak twoja prośba o złe rozwiązanie rzeczywistego problemu. Co dokładnie próbujesz osiągnąć? – soulmerge
@ZoogieZork: czasami vim jest wystarczający, a także wystarczająco prosty, nie ma potrzeby korzystania z zewnętrznych narzędzi. –