I had a problem, which can be reproduced to some extent with the
following snippet. (emacs -Q -l /tmp/bug.el)
(require 'recentf)
(setq recentf-save-file "/tmp/bug-recentf")
(setq recentf-list '("/ssh:localhost#2222:~/a.txt"))
(setq ido-use-virtual-buffers t)
(setq ido-save-directory-list-file "/tmp/bug-ido.last")
(recentf-save-list)
(ido-mode t)
(ido-switch-buffer) ; Simulating C-x b
However, that doesn't explain how that entry ended up in my
recentf-save-file. I'm guessing I opened many tramp files in a
virtual machine, and after I had halted the virtual machine,
emacs wanted to convert the file names to absolute paths.
Strangely,
(get-file-buffer "/ssh:localhost#2222:~/a.txt") and
(expand-file-name "/ssh:localhost#2222:~/a.txt") fail, but
evaluating them the second time, they succeed, but
expand-file-name returns a wrong value, i.e,
(expand-file-name "/ssh:localhost#2222:~/a.txt")
=> error
(expand-file-name "/ssh:localhost#2222:~/a.txt")
=> "/ssh:localhost#2222:~/a.txt"
"emacs -Q -l /tmp/bug.el" reproduces the problem with version
25.1.1 and a recent 27.0.50 as well, but I think it was former
who originally wrote the problematic entry into the
recent-save-file.
Thank you.