How can I get control+left arrow to go back one word in iTerm2?
Solution 1
bash
Just add the following to ~/.inputrc
:
"\e[1;5D": backward-word
"\e[1;5C": forward-word
See this archived Wiki post for some more explanation. If you want to use the alt key instead for word-to-word movement (like default OS X behavior), use:
"\e[1;9D": backward-word
"\e[1;9C": forward-word
zsh
zsh by default does not use the readline
library and therefore won't read ~/.inputrc
. To get the same functionality, you could add the following to your ~/.zshrc
to use ctrl:
bindkey -e
bindkey '\e\e[C' forward-word
bindkey '\e\e[D' backward-word
To use the alt key:
bindkey -e
bindkey '^[[1;9C' forward-word
bindkey '^[[1;9D' backward-word
See this documentation for more about the built-in zsh line editor (zle).
Why is this? You've set up your profile to use the Xterm defaults:
This is why you'll need to "catch" this sequence and tell readline
what to do.
If the above still doesn't work and you are using OS X 10.9 (Mavericks) or there abouts, you probably need to disable the global Mission Control shortcuts which prevent Control+arrow keys from reaching iTerm, even if Mission Control itself is disabled. You can do so from System Preferences → Keyboard → Shortcuts → Mission Control:
Solution 2
Working solution for zsh. Simple, straightforward, out-of-the-box.
-
Goto:
⌘, Preferences → Profiles → Keys → Keyboard Behavior
-
Load Preset:
Natural Text Editing
Solution 3
I fixed it this way:
In top menu; go to
Profiles
-> Open profiles...
-> Edit profiles... (button)
-> Keys (tab)
-> Load Preset... (dropdown)
-> Choose "Natural text editing". Done! :-)
Solution 4
I used a different approach. Using BetterTouchTool I programmed a custom keyboard shortcut for iTerm2. When I press alt-left in iTerm2, it sends the keyboard shortcut ctrl-left with the action "Send keyboard shortcut to specific application". The application is iTerm2. I did the same for alt-right mapped to ctrl-right.
The effect is that pressing alt-left or alt-right in iTerm sends a ctrl-left or ctrl-right directly to iTerm2, bypassing the usual system-wide shortcut to move a desktop left or right. Like this I get the typical mac behaviour in iTerm2, on local terminal sessions, but also on remote SSH sessions and I can use the standard ctrl-left / ctrl-right to move to different desktops. I wrote it up here:
http://www.callum-macdonald.com/2013/04/17/ctrl-left-and-ctrl-right-on-iterm2/
Solution 5
Actually, I found the easiest solution was to go to my profile settings (found in Profiles/Keys), removing the offending profile shortcuts(as profile overrides global in iTerm), in my case alt+left and alt+right and then the global shortcuts worked perfectly for me!
Also, if you're using OS X, it's probably best to stick with system wide shortcuts, i.e. using alt+left and alt+right instead for this purpose, having different behaviour in terminal is bound to cause a pain eventually.
Other than that chmac's solution to use Better Touch Tool was an elegant way to change control+arrow's behaviour in iterm only.
Related videos on Youtube
cwd
Updated on September 18, 2022Comments
-
cwd almost 2 years
I was reading up in the Linux manual and I noticed that it said I could use control+left and control+right to move forward and back words in the terminal while editing.
"Pressing Ctrl plus the Left or Right arrow key moves backward or forward a word at a time, as does pressing Esc and then B or F."
On OS X
control+left
andcontrol+right
normally control spaces. I have disabled those. I also tried to use the preferences pane to set the keyboard shortcuts:However this does not work and causes this error:
Also, if I am in iTerm and use
alt+escape
then B or F the character moves back and forth. This was happening before any of my config changes. But I'd really like to be able to use control + the arrow keys.-
Admin almost 10 yearsIncidentally, a more parsimonious way to achieve this might simply be to map command+left and command+right instead of ctrl+left and ctrl+right. I didn't need to disable anything system-wide to accomplish this.
-
-
Flo over 11 yearsI try to follow the instruction to get the alt + left and alt + right keys working. I added the two lines to my .inputrc file, but the only thing what happens when I press the keys is that either a "D" or a "C" gets printed to the shell. I'm using iTerm2 with zsh shell. Any ideas?
-
slhck over 11 years@Flo Try adding the lines
bindkey -e
,bindkey '^[[1;9C' forward-word
andbindkey '^[[1;9D' backward-word
to your~/.zshrc
instead. IIRC zsh won't read.inputrc
– or at least it works for me this way. -
seds almost 11 years@slhck, sure I will create a new question, though alt+left does work on vim, alt+right doesn't. Very weird, I will create a new question now.
-
slhck almost 11 years@Ben No idea, sorry! I'm really just the guy who uses vim for commit messages and quick fixes. I bountied your question so you'd get more attention on it.
-
mralexgray over 10 yearsUGH, god, THANK YOU. especially for the
zsh
specific info. I was going to SCREAM if I typedD
oe more time! -
Dalin over 10 yearsNot working for me with ctrl-left/right + bash, but works fine if I set it up for alt-left/right.
-
rubyruy over 10 yearsAdded an edit about Mission Control shortcuts preventing any of this from working in the most aggravatingly opaque manner. Hopefully it saves someone from going through the same thing I just did urgh...
-
Artur Bodera about 10 yearsFor OSX + zsh + iTerm2 + ctrl-left/right use the following:
bindkey -e; bindkey '\e\e[C' forward-word; bindkey '\e\e[D' backward-word
-
Orlin Bobchev about 10 yearsFor some reason my OSX preferences were restored to defaults..
-
marcantonio about 9 yearsThis works but only in the local shell. If I ssh to another box it only moves 1 character. In the default terminal app ^left and ^right work locally and remotely. Anyone have an idea?
-
marcantonio about 9 yearsDisregard. I just needed to start a new ssh session!
-
Paschalis over 8 yearsactually this is the best solution. It is confusing as most of us go to
Keys
tab. Instead we have to go toProfiles
tab -> A profile(eg default) -> keys. -
Julian A. over 8 years@ArturBodera thanks for posting! works perfectly and interprets holding the arrow key down as repeated movements, rather than having to press the arrow key each time for each word (which I had to do with the BetterTouchTool solution superuser.com/a/584175/83693)
-
revacuate over 8 yearsBetterTouchTool is not open source and could very well be doing things you wish it wasn't. The guy says he's a student but he could just as well be a three letter agency.
-
revacuate over 8 yearsThis is definitely the safest and easiest solution.
-
gerrytan over 8 yearsThe link code.google.com/p/iterm2/wiki/Keybindings is dead, do you know where is it relocated to?
-
slhck over 8 years@gerrytan You can still access it through the Wayback Archive.
-
Philip about 8 yearsThis did it for me!
-
DavidPostill about 8 yearsThis doesn't actually answer the question, which is about using <ctrl><left>
-
Seralto about 8 yearsAll you have to do is use the shortcut that fits your need. "<ctrl><left>" or whatever you want.
-
DavidPostill about 8 yearsSo please quote the essential parts of the answer from the reference link(s), as the answer can become invalid if the linked page(s) change.
-
galuszkak almost 7 yearsThanks @Happy Torturer, I believe it's best answer mostly because I don't have on plain Terminal.app that problem so I don't want to modify bash/zsh, just want to work everything like in Terminal.app.
-
vernonk over 6 yearsThis, this, this. Thank you so much for this solution! I've gone through this maddening process with each Mac I get. I now know the simplest way to make this happen. Thank you!
-
MaylorTaylor almost 6 yearsall i have under that preset is "Factory Defaults"
-
DrBeco over 4 yearsYou really don't need
bindkey -e
to make this work. Maybe you just like EMACS and are trying subconsciously bring people to it. Try it withbindkey -v
forvi
. -
Casimir over 4 yearsThis should be the accepted answer. I wonder, is there any way to load this preset from the command line rather than going through the settings GUI?
-
Player1 about 3 yearsThis should've improved the @rassom answer rather than providing a same answer with screenshot.
-
Guillaume Petit over 2 yearsWorked for me, but I needed to also disable misson control shortcuts that were having higher priority, once disabled that "Naturel Text Editing" worked