2016-07-27 29 views
2

filtern Ich habe vim-script Funktionsaufruf ScreenShellSend("some string") und ich möchte in der Lage sein, mehrere Zeilen zu filtern, um diese Funktion mit einer korrekten Zeichenfolge zu füttern.Wie kann man einige mehrzeilige Aussage in vim

Wie kann ich gehen aus zum Beispiel diese:

//@brief: an example => TO LINE IS REMOVED 
anExampleOfFunction:{[x;y] 
    x: doing some stuff; //a comment => after // is removed 
    //a comment => this is removed 
    :y; 
}; 
someVariable: 5; 
//another comment => this is removed 
anotherFunction:{[x] 2*x}; 

An:

anExampleOfFunction:{[x;y] x: doing some stuff; :y; }; someVariable: 5; anotherFunction:{[x] 2*x}; 
+1

Anstatt Ihr Mapping oder Befehl alleine zu geben, können Sie auch ein Beispiel für den ursprünglichen und erwarteten Text hinzufügen. So, dass es leicht für mich ist, zu verstehen, was Sie tun wollten, und dafür zu antworten – SibiCoder

+0

Sie können zu jeder Zeile gehen und '' '' '' drücken, um einen Kommentar zu finden und dann 'df $' drücken, um bis Ende zu löschen. Drücken Sie dann J, um mit der nächsten Zeile zu verbinden. Drücken Sie 3J wird die aktuelle Zeile mit den nächsten beiden Zeilen, zum Beispiel – SibiCoder

Antwort

4

Sie den folgenden substitute Befehl verwenden können, um Ihr Ziel zu erreichen:

:%s`\(//.\+\)\?\n`` 

Dies entfernt Kommentare und Zeilenumbrüche.

Für Ihr Beispiel, es wird Ihnen das folgende Ergebnis geben:

anExampleOfFunction:{[x;y] x: doing some stuff;   :y; }; someVariable: 5; anotherFunction:{[x] 2*x}; 

Edit:

Hier ist eine Funktion, die das gleiche tut (außer es stattdessen mit seinem Argument funktioniert):

function! Format(lines) 
    let lines = [] 
    for line in a:lines 
     let new_line = substitute(line, '//.*', '', '') 
     call add(lines, new_line) 
    endfor 
    return join(lines) 
endfunction 
+0

Ok, aber es ist nicht genau das, was ich frage, ich möchte eine vim-Skript-Funktion so im Grunde die Funktion, die ich im Skript wie aufrufen: 'your_function (getline (" '<", "'> "))'. Es mag trivial sein, aber ich weiß nichts über vim-Skripte, deshalb richte ich mich auf – statquant

+0

. Ich habe meine Antwort so bearbeitet, dass sie eine Funktion enthält, die wie gewünscht funktioniert. – antoyo

+0

Es funktioniert, Kopfgeld auf dem Weg – statquant