code: def editfile(fpath, verbose=True):  # nocover
      
      from six import types
      from ubelt import util_cmd
      import warnings
      warnings.warn('Please use xdev.editfile instead', DeprecationWarning)
      if not isinstance(fpath, six.string_types):
          if isinstance(fpath, types.ModuleType):
              fpath = fpath.__file__
          else:
              fpath =  sys.modules[fpath.__module__].__file__
          fpath_py = fpath.replace('.pyc', '.py')
          if exists(fpath_py):
              fpath = fpath_py
  
      if verbose:
          print('[ubelt] editfile("{}")'.format(fpath))
  
      editor = os.environ.get('VISUAL', 'gvim')
  
      if not exists(fpath):
          raise IOError('Cannot start nonexistant file: %r' % fpath)
      util_cmd.cmd([editor, fpath], fpath, detach=True)
docs: DEPRICATED: This has been ported to xdev, please use that version.
  
      Opens a file or code corresponding to a live python object in your
      preferred visual editor. This function is mainly useful in an interactive
      IPython session.
  
      The visual editor is determined by the `VISUAL` environment variable.  If
      this is not specified it defaults to gvim.
  
      Args:
          fpath (PathLike): a file path or python module / function
          verbose (int): verbosity
  
      DisableExample:
          >>> # This test interacts with a GUI frontend, not sure how to test.
          >>> import ubelt as ub
          >>> ub.editfile(ub.util_platform.__file__)
          >>> ub.editfile(ub)
          >>> ub.editfile(ub.editfile)