cargo-nvim

Crates.iocargo-nvim
lib.rscargo-nvim
version0.1.5
created_at2025-01-18 03:05:36.918549+00
updated_at2025-05-14 02:50:47.562911+00
descriptionA Neovim plugin for Rust Cargo commands
homepage
repositoryhttps://github.com/nwiizo/cargo.nvim
max_upload_size
id1521324
size1,525,190
nwiizo (nwiizo)

documentation

README

๐Ÿš€ cargo.nvim

Rust CI Lua CI


๐Ÿ“ฆ A Neovim plugin that provides seamless integration with Rust's Cargo commands. Execute Cargo commands directly from Neovim with a floating window interface.

cargo.nvim demo

โœจ Features

  • ๐Ÿ”ง Execute Cargo commands directly from Neovim
  • ๐ŸชŸ Real-time output in floating windows
  • ๐ŸŽจ Syntax highlighting for Cargo output
  • โšก Asynchronous command execution
  • ๐Ÿ”„ Auto-closing windows on command completion
  • โŒจ๏ธ Easy keyboard shortcuts for window management
  • ๐Ÿ“Ÿ Terminal mode for interactive applications

๐Ÿ“‘ Table of Contents

๐Ÿ“ฅ Installation

Using lazy.nvim

{
  "nwiizo/cargo.nvim",
  build = "cargo build --release",
  config = function()
    require("cargo").setup({
      float_window = true,
      window_width = 0.8,
      window_height = 0.8,
      border = "rounded",
      auto_close = true,
      close_timeout = 5000,
    })
  end,
  ft = { "rust" },
  cmd = {
    "CargoBench",
    "CargoBuild", 
    "CargoClean",
    "CargoDoc",
    "CargoNew",
    "CargoRun",
    "CargoRunTerm",
    "CargoTest",
    "CargoUpdate",
    "CargoCheck",
    "CargoClippy",
    "CargoAdd",
    "CargoRemove",
    "CargoFmt",
    "CargoFix"
  }
}

Using packer.nvim

use {
  "nwiizo/cargo.nvim",
  run = "cargo build --release",
  config = function()
    require("cargo").setup({
      float_window = true,
      window_width = 0.8,
      window_height = 0.8,
      border = "rounded",
      auto_close = true,
      close_timeout = 5000,
    })
  end,
}

๐Ÿ“‹ Requirements

  • ๐Ÿ’ป Neovim >= 0.9.0
  • ๐Ÿฆ€ Rust and Cargo installed on your system
  • ๐Ÿ“š Additional dependencies:
    • Ubuntu/Debian: libluajit-5.1-dev (Install with sudo apt install libluajit-5.1-dev)
    • macOS: luajit (Install with brew install luajit)
    • For other Linux distributions, you may need to install an equivalent LuaJIT development package

If you encounter build errors mentioning lluajit-5.1 during installation, you likely need to install the LuaJIT development package for your system.

๐Ÿ› ๏ธ Available Commands

Core Commands

  • ๐Ÿ“Š :CargoBench - Run benchmarks
  • ๐Ÿ—๏ธ :CargoBuild - Build the project
  • ๐Ÿงน :CargoClean - Remove generated artifacts
  • ๐Ÿ“š :CargoDoc - Generate project documentation
  • โœจ :CargoNew - Create a new Cargo project
  • โ–ถ๏ธ :CargoRun - Run the project in a floating window
  • ๐Ÿ“Ÿ :CargoRunTerm - Run the project in terminal mode (better for interactive applications)
  • ๐Ÿงช :CargoTest - Run tests
  • ๐Ÿ”„ :CargoUpdate - Update dependencies

Additional Commands

  • ๐Ÿ” :CargoCheck - Check the project for errors
  • ๐Ÿ“‹ :CargoClippy - Run the Clippy linter
  • โž• :CargoAdd - Add dependency
  • โž– :CargoRemove - Remove dependency
  • ๐ŸŽจ :CargoFmt - Format code with rustfmt
  • ๐Ÿ”ง :CargoFix - Auto-fix warnings
  • ๐Ÿ“ฆ :CargoPublish - Publish package
  • ๐Ÿ“ฅ :CargoInstall - Install binary
  • ๐Ÿ“ค :CargoUninstall - Uninstall binary
  • ๐Ÿ”Ž :CargoSearch - Search packages
  • ๐ŸŒฒ :CargoTree - Show dependency tree
  • ๐Ÿ“ฆ :CargoVendor - Vendor dependencies
  • ๐Ÿ›ก๏ธ :CargoAudit - Audit dependencies
  • ๐Ÿ“Š :CargoOutdated - Check outdated dependencies
  • ๐Ÿค– :CargoAutodd - Automatically manage dependencies

โš™๏ธ Configuration

You can customize cargo.nvim by passing options to the setup function:

require("cargo").setup({
  -- Window settings
  float_window = true,          -- Use floating window
  window_width = 0.8,           -- Window width (80% of editor width)
  window_height = 0.8,          -- Window height (80% of editor height)
  border = "rounded",           -- Border style ("none", "single", "double", "rounded")
  wrap_output = true,           -- Enable text wrapping in output window
  show_line_numbers = true,     -- Show line numbers in output window
  show_cursor_line = true,      -- Highlight current line in output window
  
  -- Auto-close settings
  auto_close = true,            -- Auto close window on success
  close_timeout = 5000,         -- Close window after 5000ms
  
  -- Timeout settings
  run_timeout = 300,            -- Timeout for cargo run in seconds
  interactive_timeout = 30,     -- Inactivity timeout for interactive mode
  
  -- Advanced behavior options
  force_interactive_run = true, -- Always treat cargo run as interactive mode
  max_inactivity_warnings = 3,  -- Maximum number of inactivity warnings before termination
  detect_proconio = true,       -- Enable detection of proconio usage
  force_smart_detection = true, -- Always use smart detection for interactive programs
  
  -- Key mappings (customizable)
  keymaps = {
    close = "q",
    scroll_up = "<C-u>",
    scroll_down = "<C-d>",
    scroll_top = "gg",
    scroll_bottom = "G",
    interrupt = "<C-c>",
    toggle_wrap = "w",
    copy_output = "y",
    clear_output = "c",
  },
})

โŒจ๏ธ Key Mappings

In the floating window:

  • q or <Esc> - Close the window
  • <C-c> - Cancel the running command
  • <C-u> - Scroll up
  • <C-d> - Scroll down
  • gg - Scroll to top
  • G - Scroll to bottom
  • w - Toggle text wrapping
  • y - Copy all output to clipboard
  • c - Clear output

๐Ÿ”„ Interactive Mode

For interactive programs that require user input:

  • An input field appears at the bottom of the window when needed
  • Enter your input and press Enter to send it to the program
  • The plugin automatically detects when a program is waiting for input
  • The window automatically closes after a period of inactivity (configurable)
  • Interactive mode timeout prevents hanging processes and memory leaks

๐Ÿ“Ÿ Terminal Mode

For highly interactive applications (e.g., using proconio or TUI applications):

  • Use :CargoRunTerm to run your application in a terminal emulator inside a floating window
  • Supports full terminal capabilities for interactive Rust applications
  • Useful for:
    • Competitive programming with libraries like proconio
    • Text-based UI applications
    • Programs requiring advanced terminal input/output
  • Provides a better experience than the standard :CargoRun for interactive applications

Terminal Mode Key Mappings

  • q or <Esc> - Close the window (after program completion)
  • <C-\><C-n> - Switch to normal mode (while running)
  • <C-c> - Send interrupt signal
  • <C-d> - Send EOF signal

๐Ÿ‘ฅ Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. ๐Ÿด Fork the repository
  2. ๐ŸŒฟ Create a feature branch
  3. โœ๏ธ Commit your changes
  4. ๐Ÿš€ Push to the branch
  5. ๐Ÿ“ซ Open a Pull Request

๐Ÿ“œ License

MIT License - see the LICENSE file for details.

๐Ÿ’ Acknowledgements

This plugin is inspired by various Neovim plugins and the Rust community.

๐ŸŽ‰ Related Projects

Commit count: 55

cargo fmt