Bash – Why does CTRL-r act weirdly (showing only part of a command) on OS X

bashmac-osxterminal

Ctrl+r is a great little tool for searching your .bash_history for previously run commands.

However, when I use it in my OS X Terminal.app I see weird behavior, and I was wondering if anyone else sees the same thing or knows how to fix it.

  1. Ctrl+r
  2. type in something like find
  3. oh cool, look…it's the command I wanted find . -exec grep -q "hello world" '{}' \; -print
  4. I want to run that command but change hello world to something else.
  5. So I hit or
  6. Now the command is SORTA on the command line but it always looks like some trunctated version of the command, like this: -q "blog_posts_by" '{}' \; -print, where the whole command is there, and I can use the cursor keys to move around on the line, but not all of it is printed. There is a disconnect between what is shown on the line and what the terminal actually thinks I am editing.

Does anyone have a clue why this might happen? It's not an easy phenomenon to search the webs for.

Best Answer

You probably have escape sequences for colors in your prompt that are not properly delimited. They need to be enclosed in \[ and \].

PS1='\[\033[1;36m\]\u\[\033[0m\]@\[\033[1;34m\]\h\[\033[0m\]\$ `

The length of non-printing character sequences are not included in the length of the prompt when they are thus enclosed and the position of previous commands needs to be calculated for proper display when they wrap.