• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] Ctrl-Cursor Tastenkombi funktioniert nicht bei Vim

Hallo,

ich verzweifle: das hin- und herspringen um ganze woerter/absaetze mit Ctrl-Rechts/Links/Hoch/Runter funktioniert bei mir in Vim (sowohl unter der konsole, als auch bei gvim) nicht.

keymapping mit

:map <S-Left> b
:map <S-Right> e

funktioniert (aus irgendeinem grund?) ebenfalls nicht!

vielleicht hat jemand schon was aehnliches erlebt und koennte mir helfen? das waer super!

meine versionen:
konsole 1.5.2
vim 6.3

Vielen Dank,

Jakob
 
Hi,

:p :D

das gehört so in vi.

Bitte lies z.B. auf meiner Seite den Abschnitt "Editor vi":

http://www.angelfire.com/linux/tux25/

Dort findest Du dann auch die vi-Tastenkombinationen.

Gruß
 
abgdf schrieb:
das gehört so in vi.
naja, das seh ich nicht ganz so, denn
a) nutz ich viM ;)
b) sollten da diese ctrl-cursor hotkeys funktionieren und tun es auch bei meinem kollegen beispielsweise
c) gibt es ja genau aus diesem grund dieses key-mapping, was aber bei mir eben auch nicht funktioniert - es aber sollte (ist ja ein feature von vi)

abgdf schrieb:
Dort findest Du dann auch die vi-Tastenkombinationen.
danke, aber die "ur"-hotkeys fuer wordwise scrolling kenn ich auch. wuerde sie halt gern mappen :).

aber danke fuer den link - mir scheint deine seite ist echt eine sehr gelungene zusammenfassung vieler wichtiger dinge fuer den linux einstieg - werde das auf jeden fall weiterempfehlen!

vielen dank fuer deine antwort anyways.
hat noch niemand dieses problem gehabt? merkwuerdig.
 
Hallo,

aber danke fuer den link - mir scheint deine seite ist echt eine sehr gelungene zusammenfassung vieler wichtiger dinge fuer den linux einstieg - werde das auf jeden fall weiterempfehlen!

Dankeschön !

Also, ich habe noch einmal über das Problem nachgelesen und glaube, daß es nicht so einfach zu lösen ist (nur durch ":map <C+Right> w").
Einen Einstieg geben in vim: ":h map", ":h map.txt", ":h key-mapping".

":map <Left> b" und ":map <Right> w" gehen bei mir, CTRL ist das Problem.

Vielleicht ist es dieses Problem: ":h map-keys-fails".

Es könnte damit zusammenhängen, wie vim bestimmte Keycodes vom Terminal empfängt. Das Programm "xev" zeigt Keycodes, trennt allerdings CTRL und Right-Events (zeigt also nicht <CTRL+Right>).

http://www.vim.org/htmldoc/insert.html

behauptet, <C+Right> sei im Insert-Modus bereits "w"; es müßte dann also wahrscheinlich am Terminal (xmodmap) etc. liegen.

Falls hier keiner eine Lösung weiß, wäre es vielleicht am einfachsten, wenn Dich Deine Kollegen, bei denen es funktioniert, einmal in ihre .vimrc, bzw. .exrc in ihrem User-Verzeichnis schauen lassen würden.

Die Lösung würde mich dann auch interessieren. Wenn ich noch was finde, werde ich es hier auch posten.

Beste Grüße
 
Hurra, ich hab's !

(Jedenfalls für xterm, das ich benutze.)

Man muß nur folgendes definieren:

Code:
:set <C-Right>=^[[1;5C 
:set <C-Left>=^[[1;5D

Um "^[" eingeben zu können, muß man STRG+v, und dann einmal ESC drücken.
Also z.B. bei <C-Right> nacheinander:

Code:
STRG+v
ESC
[
1
;
5
C

Dann gehen die Tasten wie erwartet.

Tipquelle:
http://vim.sourceforge.net/tips/tip.php?tip_id=1168
(Ziemlich weit unten auf der Seite.)

Falls das bei anderen Terminals (als xterm) nicht gehen sollte, kann man versuchen, die richtigen Werte für die Tasten mit ":set termcap" herauszufinden.

Wenn es geht, definiert man das am besten in

/home/user/.exrc

Dort muß man dann den Doppelpunkt weglassen.

Übrigens: Im Vim-Verzeichnis, also etwa

/usr/share/vim/vim63/

gibt es eine Datei "mswin.vim", die noch mehr M$-Verhalten ermöglicht (, wenn man das denn will).
Einbinden geht mit ":so /usr/share/vim/vim63/mswin.vim".

Viele Grüße
 
Ok, dieser Teil meiner .exrc sieht jetzt so aus:

Code:
" toggle kind of microsoftish behaviour
behave mswin
source /usr/share/vim/vim63/mswin.vim

" make ctrl with arrow keys work in xterm
set <C-Left>=^[[1;5D 
set <C-Right>=^[[1;5C
set <C-Home>=^[[1;5H 
set <C-End>=^[[1;5F 
map <C-Left> b
map <C-Right> w
" <C-Up> and <C-Down> need even more special treatment
set <F13>=^[[1;5A
set <F14>=^[[1;5B
map <F13> ^2k
map <F14> $2j

" after deleting the first character of a line go to previous line in insert mode (like ctrl+j in command mode) 
set backspace=2

Die letzte Zeile ist auch sehr wichtig (Rücktaste im Insert-Mode am Zeilenanfang geht in die vorherige Zeile (sonst STRG+j)).

Fühlt sich jetzt an wie Micro$oft Notepad :oops: :lol:.

Gruß

Edit: Noch leichte Nachbesserungen am obigen .exrc-Code.
 
Wer hätte gedacht dass Du soooooo eklig sein kannst...

Ja, ich staune auch über mich selbst ... :)

Um das auch mit "konsole" hinzukriegen (was ja die eigentliche Frage war), kann man die Antwort von A. J. Mechelynck lesen:

http://blog.gmane.org/gmane.editors.vim/day=20041018

Re: <C-Left> and <C-Right> not working in Insert mode
Newsgroups: gmane.editors.vim

>Bill Moseley <moseley <at> hank.org> wrote:
>That didn't change the behavior I'm seeing. Do the >arror ctrl-arrow keys send an escape sequence, and if >so, can I get vim to show me what it's seeing?
>Bill Moseley

See ":help i_CTRL-V"

and to work around the problem (assuming the keys misbehave in all modes but you use them most in Insert mode).

:map <press Ctrl-V><press Ctrl-Left> <C-Left>
:map! <press Ctrl-V><press Ctrl-Left> <C-Left>

etc. (The {lhs} of the mappings is two keypresses, the {rhs} is typed literally, see ":help <>" and ":help keycodes".)

Das genügt eigentlich schon. Weiter schreibt er:

In console Vim you can also do instead

:set <C-Left>=<press Ctrl-V><press Ctrl-Left>

Here the left part (before the equal sign) is typed literally.

If <Ctrl-Left> is undistinguishable to Vim from some other key sequence which must do some other action, then you need another approach, for instance

:map <S-Left> <C-Left>
:map! <S-Left> <C-Left>

where both sides are typed literally (assuming Shift-Left can be
recognised).

OTOH, if the keys in question are sending escape sequences which Vim
mistakes with a press of the <Esc> key, it may in some cases be cured by
changing the timeout values: see
:help 'timeout'
:help 'timeoutlen'
:help 'ttimeoutlen'

(with 'timeout' on and 'ttimeoutlen' shorter than 'timeoutlen' yet long
enough, Vim ought to see your terminal's key sequences if it knows about
them.)

See also the output of ":set termcap" to see what console Vim (not the GUI)
expects to see when you press a special key.

HTH,
Tony.

Bei mir geht's, zur Not würden vielleicht auch gvim/kvim helfen.
Ich denke, damit dürfte das "solved" jetzt berechtigt sein.

Beste Grüße
 
VIELEN DANK!!!! Es funktioniert!! :D

edit: :shock: :cry: nein, irgendwie doch nicht. die prozedur hat nur die cursor-tasten komplett auf "b" und "w" umgemapped. jetzt kann ich mit den cursor-tasten nicht mehr ein zeichen hin und her... also - es muss wohl an mir liegen, k.a.

recht vielen dank jedenfalls fuer die hilfe (!!!), und ich werde einfach noch herumprobieren.
 
Hmmm, und wenn Du auch zu xterm wechselst ?
Ich habe das Schriftpaket "terminus-font-4.12-2.noarch.rpm" (Teil von SuSE 10) installiert und starte mit:

Code:
xterm +sb -font '-*-terminus-*-*-*-*-24-*-*-*-*-*-*-*' -fg white -bg black

Damit hab ich schön große Schrift (Schriften kann man ggf. mit xfontsel aussuchen).

Wie wär's ?

Viele Grüße
 
Oben