Ist es möglich, im Einfügemodus in Vim einzufügen?
Ist es möglich, im Einfügemodus in Vim einzufügen?
Antworten:
Im Einfügemodus drücken CTRL-R {register}
Beispiele:
CTRL-R *
wird in den Inhalt der Zwischenablage eingefügt CTRL-R "
(das unbenannte Register) fügt das letzte Löschen oder Ziehen ein. Um dies in der Hilfe von vim zu finden, geben Sie ein :h i_ctrl-r
CTRL-R *
Funktioniert nur in GVIM oder in Versionen, die für die Interaktion mit x kompiliert wurden. Tippe vim --version
und suche +xterm_clipboard
. Wenn Sie das nicht haben, benötigen Sie eine andere Version von vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
+clipboard
, aber wenn Sie haben +xterm_clipboard
, sollten Sie das trotzdem haben. Auf einigen Betriebssystemen xterm_clipboard
ist nicht anwendbar.
*
Register mit einem mittleren Mausklick eingefügt werden, während +
das herkömmliche Kopieren / Einfügen erfolgt. standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
Wenn Sie nicht möchten, dass Vim die Formatierung in eingehendem eingefügtem Text beeinträchtigt, sollten Sie auch Folgendes in Betracht ziehen : :set paste
. Dadurch wird verhindert, dass Vim Ihren Code erneut abruft. Wenn Sie mit dem Einfügen fertig sind, :set nopaste
kehren Sie zum normalen Verhalten zurück.
Es ist auch möglich, den Modus mit einer einzigen Taste set pastetoggle=<F2>
umzuschalten , indem Sie etwas zu Ihrer .vimrc hinzufügen. Weitere Details zum Umschalten des automatischen Einrückens finden Sie hier .
:set nopaste
wird den Einfügemodus deaktivieren
:set paste!
wahrscheinlich, dass das Einfügen in Ihrem Befehlsverlauf sehr eng ist. Sie können also einfach ':' drücken, dann mit dem Pfeil nach oben und ein '!' Hinzufügen.
:set paste!
Danke :)
!
am Ende des Befehls in vim
schaltet den Befehl ein und aus. Auf diese Weise müssen Sie nicht eingeben, :set nopaste
sondern können durch Ihren Verlauf scrollen und denselben Befehl ( :set paste!
) erneut ausführen .
Nein, nicht direkt. Was Sie jedoch tun können, ist, den Einfügemodus für einen einzelnen Normalmodus schnell zu verlassen Ctrl-Ound von dort aus einzufügen, wodurch Sie wieder in den Einfügemodus versetzt werden.
Tastenkombination: Ctrl-O p
EDIT: Interessant. Es scheint, dass es einen Weg gibt, den mehrere andere Personen aufgelistet haben.
esc + p
?
esc + p + i
und definitiv einfacher zu tippen alsCTRL-R + "
CTRL-R "
. Obwohl die vimrc-Einstellungen dies ändern können, wird beim Einfügen einer neuen Zeile mit CTRL-O p
die Einrückung nicht mehr angezeigt .
Im Einfügemodus können Sie Folgendes verwenden Ctrl-R {register}
: Register kann sein:
+
für die Zwischenablage,*
für die X-Zwischenablage (zuletzt ausgewählter Text in X) "
für das unbenannte Register (letztes Löschen oder Ziehen in Vim),:h registers
).Ctrl-R {register}
fügt den Text so ein, als wäre er eingegeben worden.
Ctrl-R Ctrl-O {register}
fügt den Text mit dem ursprünglichen Einzug ein.
Ctrl-R Ctrl-P {register}
Fügt den Text ein und rückt ihn automatisch ein.
Ctrl-O
kann verwendet werden, um einen beliebigen normalen Modusbefehl auszuführen, bevor zum Einfügemodus zurückgekehrt wird,
Ctrl-O "+p
kann also beispielsweise auch verwendet werden.
Weitere Informationen finden Sie in der Dokumentation mit :h i_ctrl-r
Sie können dies verwenden, um aus der Zwischenablage einzufügen mit Ctrlv:
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
Und dies, um die visuelle Auswahl in die Zwischenablage zu ziehen Ctrlc:
vnoremap <C-c> "+y
Wenn Sie im normalen Modus standardmäßig auch die Zwischenablage für das klassische Vim-Ziehen / Einfügen ( y/ p) verwenden möchten , finden Sie hier eine Konfigurationsoption, die dies ausführt :
set clipboard=unnamedplus
Mit diesen Konfigurationen können Sie zB zuerst im normalen Modus ziehen und dann mit einfügen Ctrlv im Einfügemodus einfügen. Sie können auch Text aus verschiedenen vim-Instanzen und verschiedenen Anwendungen einfügen.
Eine weitere Option ist:
set clipboard=unnamed
Dann können Sie einfach etwas auswählen, indem Sie mit der Maus in Ihre X-Umgebung ziehen und es anschließend in vim einfügen. Aber (aus irgendeinem Grund) werden Sie yin Vim und nicht in der Lage sein, etwas ( ) zu ziehenshiftinsert danach irgendwo anders zu ziehen, was wahrscheinlich ziemlich einschränkend ist.
Vim-Dokumente dazu: http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Zum Einfügen aus benutzerdefinierten Registern können Sie den anderen Antworten folgen :). Bei dieser Antwort geht es hauptsächlich um die Integration von Vim in die Zwischenablage Ihres Systems.
Beachten Sie, dass Sie für set clipboard=unnamedplus
und set clipboard=unnamed
zum Arbeiten gvim oder vimx ( vim-X11
) verwenden müssen: Diese werden mit kompiliert +xterm_clipboard
. Sie können dies optional in Ihren .bashrc
Alias einfügen vim
mit vimx
:
if [ -e /usr/bin/vimx ]; then
alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi
Sie können herausfinden, ob Ihr vim die +xterm_clipboard
in den von bereitgestellten Informationen hat oder nicht vim --version
.
:set paste
und das Byzantinische <leader><leader> * y
auch nur aus der Ferne wünschenswert ist? Um nicht zu engagiert zu klingen, bin ich wirklich neugierig, welche Vim-Philosophie dies widerspiegelt oder ob es nur ein historisches Unglück ist.
inoremap <S-Insert> <F12><C-r>+<F12>
(ich benutze F12 als Pastetoggle). Vielen Dank.
Wenn Sie Vim so einstellen, dass es die Systemzwischenablage ( :set clipboard=unnamed
) verwendet, kann jeder Text, den Sie in Vim kopieren, mit eingefügt werdenShift +Insert . Shift+ Insertist einfach eine betriebssystemweite Einfügetastenkombination ( Ctrl+ Insertist die entsprechende 'Kopie').
p
der Text in die Zwischenablage eingefügt?
Shift + Insert
wir den Text einfügen können, müssen wir uns im Einfügemodus befinden.
Sie können auch die mittlere Maustaste verwenden, um im Einfügemodus einzufügen (nur Linux).
Sie können den -- INSERT (past) --
Modus aufrufen über:
oder
:set paste
und Aufrufen des Einfügemodus ( :set nopaste
zum Deaktivieren)-- INSERT (past) --
Verwenden Sie im Modus einfach die Einfügefunktion Ihres Systems (z. B. CtrlShiftvunter Linux,Cmdv Mac OS).
Diese Strategie ist sehr nützlich, wenn Sie vim über ssh verwenden.
Ja. In Windows Ctrl+V und Linux werden beide Maustasten fast gleichzeitig gedrückt.
Unter Windows denke ich, dass diese Zeile in meinem _vimrc es wahrscheinlich tut:
source $VIMRUNTIME/mswin.vim
Unter Linux kann ich mich nicht erinnern, wie ich es gemacht habe. Es sieht so aus, als hätte ich wahrscheinlich eine Zeile aus der Standard-VIMRC-Datei gelöscht.
In diesem Fall erscheint eine benutzerdefinierte Karte angemessen. Dies ist, was ich verwende, um zerrissene Elemente im Einfügemodus einzufügen:
inoremap <Leader>p <ESC>pa
Mein Leader
Schlüssel hier ist \
; Dies bedeutet, dass \p
beim Einfügen im Einfügemodus die zuvor gezogenen Elemente / Zeilen eingefügt werden.
Fügen Sie einfach eine Karte hinzu:
" ~/.vimrc
inoremap <c-p> <c-r>*
Starten Sie vim neu und wenn Sie Crtl+p
im Einfügemodus drücken , wird kopierter Text eingefügt