Ich habe gesehen, dass Sie den aktuellen Byte-Versatz in der Statuszeile mit anzeigen können %o
, aber ich habe keine Funktion oder keinen Befehl gefunden, der das Gleiche tut. Gibt es eine Möglichkeit, das aktuelle Byte pragmatisch zu versetzen?
Ich habe gesehen, dass Sie den aktuellen Byte-Versatz in der Statuszeile mit anzeigen können %o
, aber ich habe keine Funktion oder keinen Befehl gefunden, der das Gleiche tut. Gibt es eine Möglichkeit, das aktuelle Byte pragmatisch zu versetzen?
Antworten:
Versuche dies:
function! FileOffset()
return line2byte(line('.')) + col('.') - 1
endfunction
Dies gibt die 1-basierte Datei in gegenüber , die die gleiche ist wie %o
in statusline
. Sie können natürlich 1 subtrahieren, um den 0-basierten Versatz zu erhalten.
:help col()
: [t] ist das Ergebnis eine Zahl, die der Byte-Index der mit {expr} angegebenen Spaltenposition ist . Ich nehme an, das ist der 1-basierte Byte-Offset ...
abcäb
:? (Ich habe nicht überprüft)
Die andere Antwort hat bei mir nicht funktioniert, als ich eine Binärdatei ohne Zeilenende geöffnet habe. Es scheint, dass es einen Fehler in vim gibt, wenn es darum geht, Bytes in einer Binärdatei ohne eol zu zählen. (edit: ja, das war ein Fehler. Ich habe einen Patch eingereicht , der in 7.4.781 akzeptiert wurde ).
Verwenden Sie zum Ermitteln des Byte-Offsets unter Berücksichtigung des Fehlers in alten Vim-Versionen Folgendes:
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
Dieser Fehler betrifft auch den %o
Spezifizierer in z rulerformat
.
col('.')
tatsächlich der Byte-Offset in der Zeile zurück? Zuletzt habe ich nur die Cursorspalte angezeigt.