Updated for Mac OS X Mountain Lion 10.8.2.
In order to get page up and page down to work properly under Mac OSX Terminal, as well as the home and end of line (EoL), you need to go to Preferences and then Keyboard and configure the right escape key sequences.
(Note for laptop users: you don't have the page up/down and home/EoL keys, but you can simulate them by holding the "fn" key and pressing on an arrow key. So these configurations also apply to you.)
In the Terminal Preferences, go to the Keyboard pane and watch the the keys named 'page up', 'page down', 'home' and 'end'. You will see they already exist but are configured to scroll the buffer rather than sending commands to the server you're connected to.
In order to change this, double click on each of the relevant lines and select Action: "Send string to shell:"
You then need to enter the correct string to send to the shell. This is a multiple key sequence starting with the escape character (which is represented with it's octal code \033). Here are strings you can use for each key:
As of OSX 10.6.8, the correct fix is:
|Key||Recommended Escape Sequence||Other possible sequences you can try if the recommended doesn't work for you|
You can either type these strings on your keyboard (start by presseing Esc) or you can just copy paste the strings from above.
It is worth noting that some of these are already bound to Shift-Page Up, Shift-Page Down, Shift-Home and Shift-End (which are obtained with Shift-Fn-Up/Down/Left/Right on a laptop keyboard). So if you can change your habits slightly you don't actually need to reconfigure anything.
Also note that some people (including Apple) recommend to use \033[H for Home but this doesn't actually work in vi or vim. This is why I recommend using \033OH which has worked in any shell or editor for me so far (Mac terminal, Debian terminal, vim, etc.)
If the recommended sequences don't work for you: please try the alternative suggested here. Also please let us know with which shell or editor you are trying to make them work and which escape sequences work best for you. This way we can order them in order of popularity and possibly give specific advice for specific environments to future visitors of this page. Thank you for your feedback.
I have a new macbook (jan2009) and could not find the place to insert escape sequences in the preferences/keyboard options…
I use space to page down, the mac two key page up and down scrolls the window, not the terminal text
This worked for me, but was already set up on my 10.5 installation. It was already set up for Shift-page up/page down.
Try this in the Terminal -> Preferences -> Keyboard widget:
CTRL-A – this is to go to the beginning of a line in Bash (set this to the ‘Home’ key)
CTRL-E – this is to go to the end of the line in Bash (set this to the ‘End’ key)
The first combo will produce: \005
The second combo will produce: \001
Don’t worry, it works in 10.5.x. This also works in the C Shell (’csh’), so if you are used to using it this will work there as well.
Great! Works perfect for me!
Alternatively, if this has problems, or is bash specific (doesn’t work in tcsh) you can try this alternative solution:
Find end, home, pg up, and pg down (the list is alphabetically sorted).
First double click ‘end’ and a prompt comes up that lets you remap the key, for ‘Action’ select ’send string to shell:’ and then click on the entry field.
Press ‘Esc’ which emits ‘\033′ then type ‘[4~’ after it, so the text field should now show: “\033[4~". Click ‘OK’.
Now you should be able to remap the other keys if you know the key codes, by pressing ‘Esc’ to emit \033. The codes for each of the keys are:
page down \033[6~
page up \033[5~
You will want to add ‘Shift-pgdwn/pgup’ to ask the buffer to scroll up and down. Do this by clicking ‘+’ and adding ‘pg down’ with the ‘Shift’ modifier and then select ’scroll to next page in buffer’, and do the opposite for pg up.
I believe this is the optimal fix.
Thanks a bunch these are indeed the optimal settings!
I’ve found that the home and end keys don’t work with bash, but they work with mc (through ssh). To fix them for bash, I used this inputrc fix: http://linuxart.com/log/archives/2005/10/13/super-useful-inputrc/
I tried doing this but it didn’t work (OSX 10.5.8). Instead of going to the end of the line, I get a “BEEP” and a tilde (~) appears in the term window.
Would love to get this working if anyone knows off the top of their head what I’m doing wrong.
You’re my hero! Not having these keys work as I’m used to in a terminal window was driving me crazy.
Thanks for the heads-up on this!
Key Escape Sequence
The O’s are captital as in OOPs, they are not zero’s. This is straight from termcap for xterm and works for both the bash shell and vi/vim
Great! Thanks for this. I had to copy and paste the text but it worked flawlessly after that.
Thanks!!! The optimal setting above was my solution since i come from *nix and work alot with vi. This WAS driving me crazy. No more, yes!
norman’s comment with the OH/OF sequences finally worked for me on:
Mac OSX 10.6.2
17″ Macbook Pro (built-in keyboard)
Also works via Synergy client (on Mac), connected to [Ubuntu] Linux (running server) w/Microsoft Natural Keyboard Pro
Everything works about right….except in terminal, where the command[/alt] and ctrl keys are flipped – I flipped them in the mac preferences so that ctrl+x/c/v would work without a bizarre reach, and now I have to “alt+c” running commands to kill them. Because I do most my terminal work on Linux, this is [barely] acceptable, but any insight on how to have the best of both worlds would be appreciated – i.e.: ctrl+c/copy in email and ctrl+c/cancel in terminal.
LiveCloud.com - Blog. Get Social. Take Control.
LiveCloud is a Social Strata Venture
Thank you SOOOOOOOOOOOOOOOOOOOOO much!!!!! :))
I was getting crazy scrolling char by char until i get to the end of the console line…
Thank you Francois! however in OSX (10.6.2) the end/home keys did not work the same way for the terminal and vi.
@norman [Visitor] your bindings worked perfectly!
Fn+Shift+Up = Page Up
Fn+Shift+Down = Page Down
Norman (visitor)’s mappings also worked for me on a macbook pro with OS 10.6.3.
What I really want is for command-left / command-right to do that, like they do in every other mac app.
You are the man!!! Thanks worked like a charm! Mac OS X 10.6.4
Now… how the hell can I get these keys to work in textedit. AND Home and End keys do not work in my browser address bars. Is there a modifier? This is driving me nuts. Works fine on windows if I want to jump to the end or beginning of a url in the browser address bar.
If you find that this does not work on your command-line, keep in mind that your shell may just not know what to do with those command, but all those key sequences work pretty well in VIM editor.
For you to tell your shell how to interpret them, you either need to create a matching custom termcap entry, or use an existing one with a lot of matching capability.
For instance, Home and End does not work for me on my terminal when using vt220, xterm, or color-xterm… but when I do a “export TERM=linux” it works.
PgUP and DOWN still don’t have a function for me on my command-line, but that’s ok, since I don’t know what it is supposed to do anyway.
Actually it should be
Fn + Up Arrow = Page Up
Fn + Down Arrow = Page Down
Thanks mate! worked perfectly!
Thanks alot mate. I’ve been looking for this desperately. As a first-time Mac user, I didn’t know the Fn + direction keys were the Home, PageUp, End, PageDown keys.
Good stuff mate, worked a treat. Vim over SSH is now useable. \:D/
holding function and shift and pressing down also works.