Path: utzoo!attcan!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!julius.cs.uiuc.edu!psuvax1!psuvm!blekul11!ffaac09 From: FFAAC09@cc1.kuleuven.ac.be (Nicole Delbecque & Paul Bijnens) Newsgroups: comp.unix.questions Subject: Re: vi Alternative Required Message-ID: <90352.174110FFAAC09@cc1.kuleuven.ac.be> Date: 18 Dec 90 17:40:09 GMT References: <25267@adm.brl.mil> Organization: K.U.Leuven - Academic Computing Center Lines: 84 In article <25267@adm.brl.mil>, rbottin@atl.calstate.edu (Richard John Botting) says: > >I just caught up with this thread - I notice that nobody explained why the >PC user has such a nasty experience when learning vi. I have been teaching >vi to PC and Mac users (mainly Comp Sci Majors) for 4 or 5 years and have >come to the conclusion that I need a tape recording that says: > > DON'T TOUCH THE ARROW KEYS! > >To say nothing of Insert, Delete, Home, End, PageUp, Page Down. > >Yes - 'vi'+'termcap' can interpret these keys when in command mode. >But - on several systems that my students use the ANSI/vt100/at386/tab132 >what-have-you Escape sequence get fouled up - I assume that a buffer >somewhere between the terminal and termcap overflows. What you probably have, is an vi-implementation with a not-so-good timeout-feature. Some implementations do an alarm(1)-syscall to timeout multi-character keys. The 1-second resolution can in real-time be anything from 1 second down to 0 (possibly on heavy loaded systems > 1). There is a chance to have a premature timeout (0 seconds!). Mostly the terminal beeps, but if you press the left-arrow key (which sends the codes ESC-[-D) and you get a premature timeout, vi beeps to tell you '[' is not followed by a valid key (expecting another '[') and the 'D' erases to the end of the line. Some keys send sequences beginning with ESC-O-whatever, resulting in an Open line above... Is this what you are experiencing? Then just do ":set notimeout". This helped all those problems away at this site. There is a "gotcha" however. Just pressing to stop insert mode now temporarily leaves the cursor at the wrong place. Vi does not yet know what the next key will be: cursor-movement (e.g. ESC-[-A) or a command (e.g. ESC ESC-[-A or ESC 1G). But I can live with that. >In 'vi' (without special "map!" stuff) when the user sees a mistake on the >previous line they tap ESC k j j ... or whatever. The PC user have >developed a conditioned reflex so that there right hand is on the UP arrow >before they remember to move their LEFT hand to the ESCape key...this is >totally automatic. The ESC at the start of the Arrow key gets them >out of insert mode, and (possibly) the following stuff deletes a line, or >worse beeps and almost works...this helps to continue the reflex... >[... stuff deleted ...] >Has anyone got a set of 'map!' commands that implement arrow keys in >'vi' Input mode? Some map! stuff can help as you say. Many people setup arrow keys in insert mode. I hate this. You can setup the input maps for arrow keys to first get out of insert mode and then do the movement, like: map! ^[[A ^[k map ^[[A k etc... This way, IMHO, I feel more consistent with command-mode <-> text-mode. There has been a lot of stuff lately about those mappings and the .exrc files. Never seen how to set up a system wide .exrc file... This is how we do it: In /etc/profile or /etc/cprofile (on SysV.2) or in /etc/rcopts/LOCPRF (on SysV.3) or in .login or .profile if there is no system-wide startup-file... (bourne-shell example:) if [ -r /usr/local/lib/ex/exrc.$TERM ] then EXINIT="so /usr/local/lib/ex/exrc.$TERM" else EXINIT="so /usr/local/lib/ex/exrc.dumb" fi if [ -r $HOME/.exrc ] then EXINIT="$EXINIT|so $HOME/.exrc" fi export EXINIT The directory /usr/local/lib/ex contains mappings for most terminal types in use (some terminals here even have NextPage-keys and other rarely seen keys, why not use them...) (Do not overload these files with mappings not used by most people however!) The directory also contains special purpose setups C-mode etc. If necessary you can setup also $HOME/.exrc.$TERM this way.