Widziałem, że możesz wyświetlić bieżące przesunięcie bajtu za pomocą linii statusu %o
, ale nie znalazłem żadnej funkcji ani polecenia, które robi to samo. Czy istnieje sposób na pragmatyczne wyrównanie bieżącego bajtu?
Widziałem, że możesz wyświetlić bieżące przesunięcie bajtu za pomocą linii statusu %o
, ale nie znalazłem żadnej funkcji ani polecenia, które robi to samo. Czy istnieje sposób na pragmatyczne wyrównanie bieżącego bajtu?
Odpowiedzi:
Spróbuj tego:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
Zwraca przesunięcie oparte na 1 w pliku, które jest takie samo jak %o
w statusline
. Możesz oczywiście odjąć 1, aby uzyskać przesunięcie oparte na 0.
:help col()
: [t] wynikiem jest liczba, która jest indeksem bajtów pozycji kolumny podanej za pomocą {wyrażenie} . Rozumiem, że to 1-bajtowe przesunięcie ...
abcäb
? (Nie sprawdziłem)
Inna odpowiedź nie działa na mnie, kiedy otworzyłem plik binarny bez linia zakończona. Wydaje się, że w vimie jest błąd, jeśli chodzi o liczenie bajtów w pliku binarnym bez eol. (edycja: tak, to był błąd. Przesłałem łatkę , która została zaakceptowana w 7.4.781 ).
Aby znaleźć przesunięcie bajtu, podczas rozliczania błędu w starych wersjach Vima, użyj:
let offset = line2byte(line('.')) + col('.') - 1
if version < 781 && &l:binary == 1 && &l:eol == 0
" Vim prior 7.4.781 had a bug where the line count is off by 1 or 2.
" See https://groups.google.com/forum/#!msg/vim_dev/zX45zm-cnc0/-BWjjh5tlX8J
let offset += 1
let offset += line('.') == 1
endif
Ten błąd wpływa również na %o
specyfikator np rulerformat
.
col('.')
faktycznie zwraca przesunięcie bajtu w linii? Ostatnio spojrzałem, po prostu pokazał kolumnę kursora.