vim: einige nützliche Befehle – Teil 1

Der Editor vim kann anfangs sehr abschrecken. Wenn man jedoch einige Zeit investiert und sich mit den Befehlen und Möglichkeiten auseinander setzt, merkt man jedoch, dass bei der Arbeit mit vim viel Arbeit automatisiert werden kann. Ein Beispiel ist:

'<div class="container">' +
    '<form class="form-signin">' +
    '<h2 class="form-signin-heading">Login</h2>' +
    '<label for="inputEmail" class="sr-only">Email address</label>' +
    '<input type="email" id="inputEmail" class="form-control" placeholder="Email address" required="" autofocus="">' +
    '<label for="inputPassword" class="sr-only">Password</label>' +
    '<input type="password" id="inputPassword" class="form-control" placeholder="Password" required="">' +
    '<div class="checkbox">' +
        '<label>' +
        '<input type="checkbox" value="remember-me"> Remember me' +
        '</label>' +
    '</div>' +
    '<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>' +
    '</form>' +
'</div>'

In der Datei sollen die Anführungszeichen am Anfang und am Ende und auch das Plus am Ende jeder Zeile entfernt werden. Da es sich hierbei um alle Anführungszeichen und Pluszeichen handelt, könnte man natürlich mit jedem beliebigen Editor diese Zeichen suchen und durch nichts ersetzen. Angenommen jedoch, dass es weitere solche Zeichen gibt, könnte man diese mit vim bequem entfernen, indem man folgenden Befehl ausführt

:%norm ^xf'd$

Mit : wird in den Kommandozeilenmodus gewechselt. % bedeutet, dass alle Zeilen betrachtet werden sollen. Stattdessen könnte man an der Stelle auch eine Range von Zeilen oder eine einzelne Zeile angeben. Der Befehl norm führt die darauffolgenden Zeichen aus, als würde der Benutzer sie im Normalmodus eingeben. ^ setzt den Cursor vor das erste nicht-Whitespace-Zeichen. x löscht ein Zeichen hinter dem Cursor. f‘ setzt den Cursor vor das nächste . d$ löscht ab dem Cursor bis zum Ende der Zeile. Nach der Ausführung des Befehls sieht der Code wie gewünscht aus:

<div class="container">
    <form class="form-signin">
    <h2 class="form-signin-heading">Login</h2>
    <label for="inputEmail" class="sr-only">Email address</label>
    <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required="" autofocus="">
    <label for="inputPassword" class="sr-only">Password</label>
    <input type="password" id="inputPassword" class="form-control" placeholder="Password" required="">
    <div class="checkbox">
        <label>
        <input type="checkbox" value="remember-me"> Remember me
        </label>
    </div>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    </form>
</div>