Skip to content

ChristianMoesl/gx.nvim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔗 gx.nvim

ci

ATTENTION: There was a breaking change in version v0.5.0. The keybinding gx must now be configured manually. See Installation

✨ Features

  • open links without netrw
  • normal and visual mode support
  • links with/without an explicit protocol (e.g. google.com will open https://google.com)
  • open plugins in the browser with a single command (e.g. in lazy, packer you can hover over a plugin name, simply press gx or execute command Browse and you get to the github page of the plugin)
  • open github issues directly in the browser (e.g. Fixes #22 opens https://github.com/chrishrb/gx.nvim/issues/22)
  • dependencies from package.json (e.g. line "express": "^4.18.2", in the package.json opens https://www.npmjs.com/package/express)
  • formulae and casks from Brewfile (e.g. line brew "neovim" in the Brewfile opens https://formulae.brew.sh/formula/neovim)
  • if there is no url found under the cursor, the word/selection is automatically searched on the web
  • supports user defined handlers to extend the functionality
  • support for macOS, Linux and Windows
  • more to come (jira issues, ..)

⚡️ Requirements

  • Neovim >= 0.5.0
  • macOS (open), Linux (xdg-open) or Windows (powershell.exe start explorer.exe)

📦 Installation

require("lazy").setup({
  {
    "chrishrb/gx.nvim",
    keys = { { "gx", "<cmd>Browse<cr>", mode = { "n", "x" } } },
    cmd = { "Browse" },
    init = function ()
      vim.g.netrw_nogx = 1 -- disable netrw gx
    end,
    dependencies = { "nvim-lua/plenary.nvim" },
    config = true, -- default settings
    submodules = false, -- not needed, submodules are required only for tests

    -- you can specify also another config if you want
    config = function() require("gx").setup {
      open_browser_app = "os_specific", -- specify your browser app; default for macOS is "open", Linux "xdg-open" and Windows "powershell.exe"
      open_browser_args = { "--background" }, -- specify any arguments, such as --background for macOS' "open".
      handlers = {
        plugin = true, -- open plugin links in lua (e.g. packer, lazy, ..)
        github = true, -- open github issues
        brewfile = true, -- open Homebrew formulaes and casks
        package_json = true, -- open dependencies from package.json
        search = true, -- search the web/selection on the web if nothing else is found
        jira = { -- custom handler to open Jira tickets (these have higher precedence than builtin handlers)
          handle = function(mode, line, _)
            local ticket = require("gx.helper").find(line, mode, "(%u+-%d+)")
            if ticket and #ticket < 20 then
              return "http://jira.company.com/browse/" .. ticket
            end
          end,
        },
      },
      },
      handler_options = {
        search_engine = "google", -- you can select between google, bing, duckduckgo, and ecosia
        search_engine = "https://search.brave.com/search?q=", -- or you can pass in a custom search engine
      },
    } end,
  },
})

📡 Commands

  • Browse <URL or WORDS>, e.g. Browse http://google.de, Browse example
  • OR hover/select words, links and more and execute command Browse

🚀 Usage

When your cursor is over a link or you mark a link or part of a link with the visual mode, you can press gx to open the link in the browser.

📄 Acknowledgements

About

Implementation of gx without the need of netrw

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 97.1%
  • Makefile 1.7%
  • Vim Script 1.2%