11

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.

2
  • Does this only happen on lines longer then your term window width?
    – Essobi
    Jan 19, 2011 at 18:03
  • What version of Terminal.App/OSX are you running BTW? Bash version? Can you show us your .bashrc as well?
    – Essobi
    Jan 19, 2011 at 20:07

4 Answers 4

14

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.

2
  • OK, I had a few more problems, that were solved by the answerer over on this StackOverflow thread - stackoverflow.com/questions/35563/… Jan 22, 2011 at 23:19
  • This applies to newlines in the prompt, too. I had a hicolor control sequence dropped because it was at the beginning of PS1, but not again after the newline char within.
    – Walf
    Mar 11, 2016 at 2:09
0

This could be due to the way the escape keys are configured on your Terminal, what I normally do is use the left or right arrow on iTerm or Terminal.app since I'm not a fan of hitting return immediately, does that work for you?

0

Another possible cause for this problem is having the wrong TERM value. For instance, this happened to me when I was using colors in my PS1, but my TERM was set to xterm. I changed it to xterm-256color and then CTRL-r started working correctly again.

0

And for those who find this question in Google - in modern MacOS, when using zsh, the escape sequence is not \[...\], but %{...%}

Correct prompt for OP would be:

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .