2009-09-27 6 views
12

je veux obtenir le décalage deÊtre OFFSET du tampon courant dans vim (en particulier, via un script python)

  1. la position actuelle du curseur
  2. la plage de sélection en cours

dans vim , à partir du début du fichier. Je le fais en python, alors je vous suggère comment le faire avec le script python de vim serait très utile.

J'ai utilisé vim.current .. auparavant pour faire des scripts, mais il utilise des lignes et des colonnes plutôt qu'un décalage général.

Est-ce que je devrais calculer le montant de toutes les longueurs de ligne précédentes + la ligne actuelle, ou y a-t-il une méthode plus simple?

Répondre

13

Si votre vim est compilé avec l'option +byte_offset, puis dans un script Python après la import vim d'habitude, vous pouvez utiliser, par exemple:

vim.eval('line2byte(line("."))+col(".")') 

pour obtenir l'octet décalage du début du fichier de la position du curseur , et de même pour les autres marques. Plus généralement, si vous avez une paire ligne/colonne ceci (en supposant que votre vim a été compilé avec +byte_offset) est le moyen d'obtenir un décalage d'octet (il y a aussi une fonction byte2line pour aller dans l'autre sens).

Alors que le module vim fait faire beaucoup de fonctionnalités directement aux scripts Python dans vim, j'ai trouvé que vim.eval et vim.command sont souvent les plus pratique (et parfois la seule façon d'obtenir ;-) dans tout aussi profond que nécessaire;-). Oh, et j'essaie toujours d'avoir un vim compilé avec + juste ce que je peux quand même ;-).

+0

Merci, c'est très très utile !! Je soupçonnais qu'il doit y avoir un tel chemin si l'API réelle ne le supporte pas :-) –

+3

ou directement: ': echo eval (line2byte (line (".))) + Col (".")) ' – mykhal

11

Vous pouvez également regarder le paramètre statusline. Cela ajoutera le bye offset à la statusline:

set statusline+=%o 

Voir :h statusline

juste être prudent parce que le statusline par défaut est vide et en ajoutant le% o, vous perdrez tous les paramètres par défaut.

+2

Pour afficher la ligne d'état lorsque vous ouvrez une fenêtre: 'set laststatus = 2' – kizzx2

Questions connexes