Skip to content

Latest commit

History

89 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

printf.nvim

A smarter print debugging statement generator for C/C++

printf.nvim

Features

  • Generates print statements for:
    • line numbers
    • function names
    • variable values
  • Syntax and context aware
  • Automatic format specifier detection
  • Customizable (see the Examples section for inspiration)

Requirements

  • Neovim >= 0.8.0
  • A tree-sitter parser for C/C++
  • The clangd language server

Installation

lazy.nvim

{
'declancm/printf.nvim'
}

Usage

Lua API

require('printf').print_var() -- Print the variable under the cursorrequire('printf').print_line() -- Print the current line numberrequire('printf').print_func() -- Print the name of the enclosed functionrequire('printf').clean() -- Cleanup generated statements

Vim Commands

The Printf command can be used to access the Lua API as Vim commands

:Printf print_var" equivalent to `:lua require('printf').print_var()`
:Printf print_line" equivalent to `:lua require('printf').print_line()`
:Printf print_func" equivalent to `:lua require('printf').print_func()`
:Printf clean" equivalent to `:lua require('printf').clean()`

Example Keymaps

Lua

vim.keymap.set('n', '<leader>dv', require('printf').print_var, {})
vim.keymap.set('n', '<leader>dl', require('printf').print_line, {})
vim.keymap.set('n', '<leader>df', require('printf').print_func, {})
vim.keymap.set('n', '<leader>dc', require('printf').clean, {})

VimL

nnoremap<leader>dv <cmd>Printf print_var<cr>nnoremap<leader>dl <cmd>Printf print_line<cr>nnoremap<leader>df <cmd>Printf print_func<cr>nnoremap<leader>dc <cmd>Printf clean<cr>

Help

Help docs can be accessed with :help printf.nvim

Configuration

require('printf').setup({
-- Generated function call optionscalled_function= {
-- Name of the called functionname='printf',
-- Add additional arguments before the format stringadditional_args= {},
},
-- 'print_var' specific optionsprint_var= {
-- Automatically dereference supported pointer typesdereference_pointers=false,
-- Format char * variables as stringschar_ptr_strings=true,
},
-- 'print_line' specific optionsprint_line= {
-- The variable/identifier/macro with the line number integer valuevariable='__LINE__',
},
-- 'print_func' specific optionsprint_func= {
-- The variable/identifier/macro with the function name stringvariable='__func__',
},
})

Examples

Minimal Neovim Config

-- Install pluginsrequire('lazy').setup({
'neovim/nvim-lspconfig',
'declancm/printf.nvim'
})
-- Setup the clangd language serverrequire('lspconfig').clangd.setup({})
-- Setup printfrequire('printf').setup()

Standard Error Stream

Config:

require('printf').setup({
called_function= {
name='fprintf',
additional_args= { 'stderr' }
}
})

Output:

fprintf(stderr, "example: %d\n", example); // auto-generated printf

Pretty Function

Config:

require('printf').setup({
print_func= { variable='__PRETTY_FUNCTION__' }
})

Output:

printf("function: %s\n", __PRETTY_FUNCTION__); // auto-generated printf

About

A smarter print debugging statement generator for C/C++

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages