<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _create_key_manager(self, get_match_fuzzy, set_match_fuzzy, get_enable_vi_bindings, set_enable_vi_bindings, get_show_completion_columns, set_show_completion_columns, get_show_help, set_show_help, stop_input_and_refresh_cli):
 """Create and initialize the keybinding manager. :type get_fuzzy_match: callable :param get_fuzzy_match: Gets the fuzzy matching config. :type set_fuzzy_match: callable :param set_fuzzy_match: Sets the fuzzy matching config. :type get_enable_vi_bindings: callable :param get_enable_vi_bindings: Gets the vi (or emacs) key bindings config. :type set_enable_vi_bindings: callable :param set_enable_vi_bindings: Sets the vi (or emacs) key bindings config. :type get_show_completion_columns: callable :param get_show_completion_columns: Gets the show completions in multiple or single columns config. type set_show_completion_columns: callable :param set_show_completion_columns: Sets the show completions in multiple or single columns config. :type get_show_help: callable :param get_show_help: Gets the show help pane config. :type set_show_help: callable :param set_show_help: Sets the show help pane config. :type stop_input_and_refresh_cli: callable param stop_input_and_refresh_cli: Stops input by raising an `InputInterrupt`, forces a cli refresh to ensure certain options take effect within the current session. :rtype: :class:`prompt_toolkit.KeyBindingManager` :return: A custom `KeyBindingManager`. """

        assert callable(get_match_fuzzy)
        assert callable(set_match_fuzzy)
        assert callable(get_enable_vi_bindings)
        assert callable(set_enable_vi_bindings)
        assert callable(get_show_completion_columns)
        assert callable(set_show_completion_columns)
        assert callable(get_show_help)
        assert callable(set_show_help)
        assert callable(stop_input_and_refresh_cli)
        self.manager = KeyBindingManager(
            enable_search=True,
            enable_abort_and_exit_bindings=True,
            enable_system_bindings=True,
            enable_auto_suggest_bindings=True,
            enable_open_in_editor=False)

        @self.manager.registry.add_binding(Keys.F2)
        def handle_f2(_):
            """Toggle fuzzy matching.

            :type _: :class:`prompt_toolkit.Event`
            :param _: (Unused)

            """
            set_match_fuzzy(not get_match_fuzzy())

        @self.manager.registry.add_binding(Keys.F3)
        def handle_f3(_):
            """Toggle Vi mode keybindings matching.

            Disabling Vi keybindings will enable Emacs keybindings.

            :type _: :class:`prompt_toolkit.Event`
            :param _: (Unused)

            """
            set_enable_vi_bindings(not get_enable_vi_bindings())
            stop_input_and_refresh_cli()

        @self.manager.registry.add_binding(Keys.F4)
        def handle_f4(_):
            """Toggle multiple column completions.

            :type _: :class:`prompt_toolkit.Event`
            :param _: (Unused)

            """
            set_show_completion_columns(not get_show_completion_columns())
            stop_input_and_refresh_cli()

        @self.manager.registry.add_binding(Keys.F5)
        def handle_f5(_):
            """Toggle the help container.

            :type _: :class:`prompt_toolkit.Event`
            :param _: (Unused)

            """
            set_show_help(not get_show_help())
            stop_input_and_refresh_cli()

        @self.manager.registry.add_binding(Keys.F9)
        def handle_f9(event):
            """Switch between the default and docs buffers.

            :type event: :class:`prompt_toolkit.Event`
            :param event: Contains info about the event, namely the cli
                which is used to changing which buffer is focused.

            """
            if event.cli.current_buffer_name == u'clidocs':
                event.cli.focus(u'DEFAULT_BUFFER')
            else:
                event.cli.focus(u'clidocs')

        @self.manager.registry.add_binding(Keys.F10)
        def handle_f10(event):
            """Quit when the `F10` key is pressed.

            :type event: :class:`prompt_toolkit.Event`
            :param event: Contains info about the event, namely the cli
                which is used for exiting the app.

            """
            event.cli.set_exit()