Vim script internal debugger (output in separate window, tab, or remote vim)
Clone or download
cecamp and vim-scripts Version 20
* DechoSep() can now be externally called (and :Dsep  makes it easy to use).  Creates an easy-to-find separator in the debugging output.
* bug fixes (Cyan, Magenta highlighting; improved DechoTab's tab search, unwanted DechoRemOn staircasing)
Latest commit 3a55aca Oct 23, 2008
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc Version 20 Oct 18, 2010
plugin Version 20 Oct 18, 2010
syntax Version 20 Oct 18, 2010
README Version 6 Oct 18, 2010


This is a mirror of

The Decho.vim plugin provides debugging messages in a separate window.  One puts

    Decho "some message here"
    call Decho("another message")

and Decho will split the screen with a five line debugging window on the bottom of the display where the messages will appear.  Allows one to inspect multiple error messages with the usual vim editing commands!

To better support the debugging of scripts, Decho.vim also provides:

    call Dfunc("YourFunctionName([arg1<".a:arg1."> arg2<".a:arg2.">])")
    call Dret("YourFunctionName [returnvalue]")

These two functions use Decho(), but also provide function tracking.  The .vim/syntax/Decho.vim provides special highlighting for the DBG buffer, too.  See the example below!

One may redirect the output of arbitrary vim commands to the DBG buffer with the following function:

    call Dredir("command")

For example, consider

	call Dredir("ls")

Decho.vim makes it easy to turn debugging on and off in your scripts:

    Turning Debugging On:
        vim yourscript.vim

    Turning Debugging Off:
        vim yourscript.vim

Some plugins use events such as WinEnter and others attempt to control window layout.  Decho supports these plugins with four methods to avoid disturbing the display:

	DechoMsgOn  -- subsequent debugging output uses :echomsg
	DechoRemOn  -- subsequent debugging output goes to a remote gvim which DechoRemOn will set up itself
        DechoTabOn  -- subsequent debugging output goes to a separate debugging tab/window
	DechoVarOn  -- subsequent debugging output goes to a variable (default value: g:dechovar)

With any of these enabled, subsequent Dfunc, Dret, Decho, and Dredir output will be directed as indicated.


    LocalBrowse(dirname<.>) {
    |NetGetcwd() {
    ||return NetGetcwd /home/cec/.vim/VIMSCRIPT/ }
    |Perform directory listing...
    |dirnamenr=1 dirname</home> pre-exists
    |changed directory to</home>
    |buffer already exists, but needs listing (buf#1)
    |Setting up local browser maps
    |NetGetcwd() {
    ||return NetGetcwd /home/cec/.vim/VIMSCRIPT/ }
    |NetGetcwd() {
    ||return NetGetcwd /home/cec/.vim/VIMSCRIPT/ }
    |NetGetcwd() {
    ||return NetGetcwd /home/cec/.vim/VIMSCRIPT/ }
    |NetGetcwd() {
    ||return NetGetcwd /home/cec/.vim/VIMSCRIPT/ }
    |NetGetcwd() {
    ||return NetGetcwd /home/cec/.vim/VIMSCRIPT/ }
    |NetGetcwd() {
    ||return NetGetcwd /home/cec/.vim/VIMSCRIPT/ }
    |set up banner
    |directories will be sorted by name
    |LocalBrowseList(dirname</home>) {
    |(elided for brevity)
    ||return LocalBrowseList }
    |SetSort() bannercnt=8 {
    |(elided for brevity)
    ||return SetSort }
    |NetSort() {
    ||return NetSort }
    |return LocalBrowse : file</home> }

(alpha/beta version available at