blog/templates/permalink.htm - header
Hauptseite
18.03.2006 20:48:35

Mein erstes vim-Skript... :)

Es ist nun tatsächlich soweit. Ich habe mein erstes vim-Skript erstellt (bzw. eine Funktion). Da ich dieses Blog per vim bearbeite, und ich immer mal wieder Links eintrage, hat es mich geärgert, dass ich die Zeile für den Link immer wieder von Hand eintragen muss. D.h. jedes Mal URL kopieren, Source der Seite öffnen, Titel der Seite kopieren. Target anfügen. Sehr nervig. Ab jetzt kann ich das ganze durch einen geführten Vorgang machen. vim-Funktion aufrufen. URL eingeben, target eingeben und, voila, meine Zeile mit dem Title automatisch aus der Seite extrahiert liegt vor. Wie z.B. hier

Tip #1178 - Simple function to add a full link-tag with automatic title : vim online

Eine extreme Vereinfachung. :-) Und ausserdem habe ich jetzt das erste Mal in das Thema vim-Skripting reingeschnüffelt. Für andere User, die dieses Feature brauchen könnten (z.B. andere nanoblogger-User), hier nochmal das Skript zum selber nutzen:

" This small function simplifies the addition of links to an html-Page. The
" title of the linked page automagically is requested and added to the output
" The line is added after the current line.
"
" Author: Gerhard Siegesmund <jerri@jerri.de>

map <leader>al :call AddLinkToText()<CR>

function! AddLinkToText()
    let url = input("URL to add? ", "")
    if strlen(url) == 0
        return
    endif

    " Save b register
    let saveB = @b

    " Get the target
    let target = input("Target for this link? ", "_blank")
    if strlen(target) > ""
        let target = " target=\"" . target . "\""
    endif

    " Get the source of the page
    let code = system("lynx -dump -source " . url)

    " Find the title of the page
    let title = substitute(code, '.*head.*<title[^>]*>\(.*\)<\/title>.*head.*', '\1', '')
    if title == code
        " If nothing changed we couldn't find the regular expression
        let title = "Unknown"
    endif
    " Remove newline-characters (not yet tested!)
    let title = substitute(title, "\n", " ", "g")

    " Output the code
    let @b = "<a href=\"" . url . "\"" . target . ">" . title . "</a>"
    put b

    " Restore b register
    let @b = saveB
endfunction


Erstellt von Jerri | Kategorie: vim