say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

and now I decided I want to change the word Hello to Hi. To do that, right now I have to keep pressing (or hold down) the left keyboard key until the "cursor" gets to the end of the word Hello, and then delete it. The usual 'holding down option' technique doesn't work as it does in most other OS X applications.

Is there a way to skip a word at a time instead (or any other shorter way of getting the cursor there)?

2 Answers
2

Command line editing is a function of your shell, not of Terminal. Probably your shell is bash and probably its command line editing style is set to “emacs”.

Here are a few of the Emacs-style key combinations that you might find handy:

C-a: beginning-of-line

C-e: end-of-line

M-f: forward-word

M-b: backward-word

C-d: delete-char

M-d: kill-word (delete the next ‘word’)

M-DEL: backward-kill-word

C-x means Control+x, so C-a is Control+a.

M-x means Meta+x, but there probably is no Meta key on your keyboard. So instead, you can use ESC x (i.e. Escape then x). Terminal has an setting to automatically send ESC before keys pressed with Option held down. Using this feature disables the extended character handling that Mac OS X usually provides when using the Option modifier. So, if you use few extended characters and want to have Option+x send ESC x, then you can enable this Terminal option.

There are lots of ways of moving to “Hello” in your example:

Search for “Hello”: C-r H e l l o C-j (or ESC)

In normal Emacs, you would just use RET (Return) to end the search at the current location and return to editing. But in bash, the default bindings cause RET (i.e. C-m) to always execute the current line, even if an incremental search is active. So the C-j/ESC part is a deviation from normal Emacs.

Jump to the beginning of the line and move forward: C-a M-f C-f (or →)

Jump to the beginning of the line, then move by words: C-a M-f M-f M-b

Use M-b a lot (only really feasible if you map Option to Meta).

There are also several ways of accomplishing your desired replacement:

I'm not sure if this is obvious or not, it took me a minute to figure it out, but I'm on a MBP without a meta key and I'm using a default Terminal configuration. To move forward and backward on words I can press Esc and then F, or Esc and then B. Just wanted to mention that because the way it was explained above was making me try and press Esc + x and then f or b...
–
cwdJan 23 '11 at 22:06

Is there a way to change the environment or shell so that I can do ctrl or fn + arrow keys to match my IDE?
–
codecowboyMay 6 '11 at 12:44

@codecowboy: It is technically possible (depending on which exact behavior you want), but it would not be trivial. You can configure Terminal to send additional codes for Control-modified keys (but not fn; it usually just replaces one key with another instead of adding a modifier “bit”). Then you would have to extend a terminfo entry and set the TERM environment variable to the new entry to let programs (e.g. your shell) know about the extra codes. Finally, you might need to redefine the bindings in individual programs (e.g. your shell) to trigger some behavior based on your new keys.
–
Chris JohnsenMay 6 '11 at 17:29