diff --git a/share/functions/fish_config.fish b/share/functions/fish_config.fish
index 5b08b3254..94474ec12 100644
--- a/share/functions/fish_config.fish
+++ b/share/functions/fish_config.fish
@@ -82,34 +82,39 @@ function fish_config --description "Launch fish's web based configuration"
                         return 1
                     end
 
-                    set -l have 0
+                    set -l have
                     for f in $prompt_dir/$argv[1].fish
                         if test -f $f
                             source $f
-                            set have 1
+                            set have $f
                             break
                         end
                     end
-                    if test $have -eq 0
+                    if not set -q have[1]
                         echo "No such prompt: '$argv[1]'" >&2
                         return 1
                     end
+
+                    # Erase the right prompt if it didn't have any.
+                    if functions -q fish_right_prompt; and test (functions --details fish_right_prompt) !=  $have[1]
+                        functions --erase fish_right_prompt
+                    end
                 case save
                     read -P"Overwrite prompt? [y/N]" -l yesno
                     if string match -riq 'y(es)?' -- $yesno
                         echo Overwriting
                         cp $__fish_config_dir/functions/fish_prompt.fish{,.bak}
 
+                        set -l have
                         if set -q argv[1]
-                            set -l have 0
                             for f in $prompt_dir/$argv[1].fish
                                 if test -f $f
-                                    set have 1
+                                    set have $f
                                     source $f
                                     or return 2
                                 end
                             end
-                            if test $have -eq 0
+                            if not set -q have[1]
                                 echo "No such prompt: '$argv[1]'" >&2
                                 return 1
                             end
@@ -118,8 +123,15 @@ function fish_config --description "Launch fish's web based configuration"
                         funcsave fish_prompt
                         or return
 
-                        functions -q fish_right_prompt
-                        and funcsave fish_right_prompt
+                        if functions -q fish_right_prompt; and test (functions --details fish_right_prompt) =  $have[1]
+                            # We just read a right prompt, save it.
+                            funcsave fish_right_prompt
+                        else if test -e "$__fish_config_dir/functions/fish_right_prompt.fish"; and test (functions --details fish_right_prompt) != "$have[1]"
+                            # We used to have a right prompt, overwrite it with an empty one.
+                            function fish_right_prompt
+                            end
+                            funcsave fish_right_prompt
+                        end
 
                         return
                     else