Ich benutze VI und VIM seit Jahren (30 oder mehr) (in xterms, nicht in einem eigenen Fenster, gvim) und ich habe eine riesige Bibliothek von vim- Befehlen , die ich vim mit der mittleren Maustaste als Auswahl gebe.
Zum Beispiel würde ich oft Dinge tun wie ...
vi {many_hundreds_of_files}
paste vim commands using mouse - one paste per file.
Die Auswahl würde viele VIM-Befehle enthalten, um beispielsweise Tests zu ersetzen, zu formatieren, Linien zu verschieben usw. usw. usw. und endet normalerweise mit: w und: next VIM-Befehlen am Ende der Auswahl, vim ist also bereit für mich, wieder in die nächste datei einzufügen. Auf diese Weise kann ich eine große Anzahl von Dateien auf SEHR komplexe Weise aktualisieren, ohne dass dafür spezielle Skripte (z. B. Perl-In-Place-Bearbeitung) erforderlich sind.
Einige dieser vim-Befehlspasten sind mehr als 200 Zeilen lang (gespeichert in Textdateien, die ich auf dem Bildschirm eingeblendet habe, und "Alles kopieren"! Diese nehmen eine Menge Änderungen an der Menge von Tausenden von Dateien vor, die ich neu formatiere. Aber Nur für den spezifischen Satz von Dateien, nicht für meine tägliche Arbeit. EG: Massenreformierung für Text- / Datendateien.
Das Problem...
Während meines letzten System-Patches (Fedora 25) fügt vim jetzt die Mausauswahl als TEXT und nicht als vim-Befehle ein, und ich kann sie scheinbar nicht stoppen!
Auf einem anderen System (Fedora 24) funktioniert es immer noch einwandfrei.
Wenn ich als Text einfügen möchte, gehe ich vor dem Einfügen in den Einfügemodus! Ich möchte nicht, dass VIM automatisch eine Auswahl als Text einfügt, wenn es sich nicht im Einfügemodus befindet. Ich verstehe, dass dies als Sicherheitsmerkmal gedacht war, aber für mich ist es ein großes Usability-Problem.
Ich habe versucht, Terminfo-Einträge (xterm-256color) von einem Computer zurück zu datieren, der dies nicht tut (insbesondere den "kmous" -Termino-Eintrag). Ich habe mir auch die vim ": set mouse =" Einstellung angesehen (die null ist!). Ich weiß nicht, ob es das xterm (zweifelhaft) oder etwas ist, das sich in VIM geändert hat (wahrscheinlich), und Änderungsprotokolle und Google waren nicht hilfreich.
Nichts scheint mir jedoch das alte Verhalten zu bringen.
vim
Änderung handelt: Wie kannvim
in einemxterm
Wissen etwas über die Tastatur eingegeben oder über die Maustaste eingefügt werden? Ich kenne einen solchen Mechanismus nicht. Auf der anderen Seitexterm
weiß, dass es ausgeführt wird,vim
so dass es entscheiden könnte, das Einfügen miti
und <esc> zu umgeben. Versuchen Sie (a) mit einem anderen Terminalfenster und (b) einer Kopievim
mit einem anderen Namen. Dies sollte helfen, die Ursache des Problems einzugrenzen.vim
die Entführung Ihrer Einfügemethode. Versuchen Sie vielleicht, ssh'ing oder telneting in Ihren Computer und fügen Sie auf diese Weise ein. Wenn Sie eine Windows-Box haben, verwenden Sie Putty, um ssh in Ihren Fedora25-Computer zu integrieren und auf diese Weise einzufügen.gvim.exe
(graphical-vim) und die Befehlszeilevim.exe
. Fügen Sie "itext" in gvim.exe ein und Sie erhaltenitext
. Fügen Sie es in die vim.exe ein und Sie erhaltentext
pastetoggle
Option?Antworten:
Nachdem ich viele Webseiten durchgesehen hatte und viele Hinweise gegeben hatten, die nicht zu funktionieren schienen, fand ich einen Hinweis (zusätzlicher Text um eine Paste), der mich zur Ursache und zur Lösung des Problems führte.
Es scheint, dass vim eine Reihe von 'gefälschten' Termcap-Einträgen eingebaut hat, die es verwendet, wenn es bestimmte Terminals erkennt (und manchmal falsch wird, obwohl es in diesem Fall nicht falsch war).
Termcap-Einstellungen in vim sind zahlreich. Als solche werden sie NICHT in einer normalen Einstellungsliste ": set all" angezeigt. Um sie zu sehen, müssen Sie ": set termcap" verwenden. Die spezifische 'nicht standardmäßige' Termcap-Einstellung ist "t_BE" (siehe vim ": help t_BE"). In der integrierten Hilfe "xterm-bracketed-paste" wird diese interne Cap-Einstellung für VIM erläutert.
Wenn diese Einstellung definiert ist (in diesem Fall von Vim, nicht termcap / terminfo), sendet vim sie beim Start an xterm, wodurch xterm angewiesen wird, spezielle Codes um jeden Text hinzuzufügen, den der Benutzer aus einer externen Quelle einfügt. Wenn vim diese sieht, wechselt es automatisch nicht nur in den Einfügemodus, sondern setzt auch den Einfügemodus, um den Text nicht zu formatieren.
Letzteres (Paste-Modus) finde ich SEHR nützlich! Ersteres hat mir die ganze Mühe gemacht.
Die Brute-Force-Lösung deaktiviert das Einfügen in Klammern, indem dies zur ".vimrc" hinzugefügt wird.
Eine alternative Lösung ....
Anstatt das Einfügen in Klammern vollständig zu deaktivieren, stoppen Sie vim, um Maßnahmen zu ergreifen, wenn die Startsequenz eines Terminal-Einfügens (über die Maus) im Befehls- oder Normalmodus angezeigt wird.
Dies bedeutet, dass vim beim Einfügen von Text im Einfügemodus nicht versucht, Text einzuräumen (einzurücken), der höchstwahrscheinlich bereits eingerückt ist.
Dies bedeutet nicht, dass ich den Einfügemodus nicht mehr umschalten muss, da ich auch den Umschaltmodus einfüge (der F2 zugeordnet ist), um "showbreak" und "listchars" (umbrochene Zeilen, Tabulatoren, Leerzeichen ohne Unterbrechungen und) anzuzeigen zusätzliche Leerzeichen am Zeilenende). Ich müsste vim immer noch in diesen Modus versetzen, wenn ich eine Mausauswahl treffen möchte, um sie an anderer Stelle einzufügen.
Kommentare und Vorschläge zu den Lösungen sind willkommen.
quelle