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.