Một mục mã nguồn mở trong kho dữ liệu GitHub của TopGit: ThePrimeagen/harpoon, 9.2k sao, Lua.
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
VÌ SAO CHƯA CÓ REVIEW
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
This is a deprecated and all future changes will be to the branch harpoon2.
Harpoon 2
STATUS: Merging into mainline April 20th or June 9th (nice)
Legacy Harpoon README
Harpoon
Getting you where you want with the fewest keystrokes.
-- image provided by Bob Rust
⇁ WIP
This is not fully baked, though used by several people. If you experience any
issues, see some improvement you think would be amazing, or just have some
feedback for harpoon (or me), make an issue!
⇁ The Problems:
You're working on a codebase. medium, large, tiny, whatever. You find
yourself frequenting a small set of files and you are tired of using a fuzzy finder,
:bnext & :bprev are getting too repetitive, alternate file doesn't quite cut it, etc etc.
You want to execute some project specific commands or have any number of
persistent terminals that can be easily navigated to.
⇁ The Solutions:
The ability to specify, or on the fly, mark and create persisting key strokes
to go to the files you want.
Unlimited terminals and navigation.
⇁ Installation
neovim 0.5.0+ required
install using your favorite plugin manager (vim-plug in this example)
Plug 'nvim-lua/plenary.nvim' " don't forget to add this one if you don't have it yet!
Plug 'ThePrimeagen/harpoon'
⇁ Harpooning
here we'll explain how to wield the power of the harpoon:
Marks
you mark files you want to revisit later on
:lua require("harpoon.mark").add_file()
File Navigation
view all project marks with:
:lua require("harpoon.ui").toggle_quick_menu()
you can go up and down the list, enter, delete or reorder. q and <ESC> exit and save the menu
you also can switch to any mark without bringing up the menu, use the below with the desired mark index
:lua require("harpoon.ui").nav_file(3) -- navigates to file 3
you can also cycle the list in both directions
:lua require("harpoon.ui").nav_next() -- navigates to next mark
:lua require("harpoon.ui").nav_prev() -- navigates to previous mark
from the quickmenu, open a file in:
a vertical split with control+v,
a horizontal split with control+x,
a new tab with control+t
Terminal Navigation
this works like file navigation except that if there is no terminal at the specified index
a new terminal is created.
lua require("harpoon.term").gotoTerminal(1) -- navigates to term 1
Commands to Terminals
commands can be sent to any terminal
lua require("harpoon.term").sendCommand(1, "ls -La") -- sends ls -La to tmux window 1
further more commands can be stored for later quick
lua require('harpoon.cmd-ui').toggle_quick_menu() -- shows the commands menu
lua require("harpoon.term").sendCommand(1, 1) -- sends command 1 to term 1
Tmux Support
tmux is supported out of the box and can be used as a drop-in replacement to normal terminals
by simply switching 'term' with 'tmux' like so
lua require("harpoon.tmux").gotoTerminal(1) -- goes to the first tmux window
lua require("harpoon.tmux").sendCommand(1, "ls -La") -- sends ls -La to tmux window 1
lua require("harpoon.tmux").sendCommand(1, 1) -- sends command 1 to tmux window 1
sendCommand and goToTerminal also accept any valid tmux pane identifier.
lua require("harpoon.tmux").gotoTerminal("{down-of}") -- focus the pane directly below
lua require("harpoon.tmux").sendCommand("%3", "ls") -- send a command to the pane with id '%3'
Once you switch to a tmux window you can always switch back to neovim, this is a
little bash script that will switch to the window which is running neovim.
In your tmux.conf (or anywhere you have keybinds), add this
bind-key -r G run-shell "path-to-harpoon/harpoon/scripts/tmux/switch-back-to-nvim"
Telescope Support
1st register harpoon as a telescope extension
require("telescope").load_extension('harpoon')
currently only marks are supported in telescope
:Telescope harpoon marks
⇁ Configuration
if configuring harpoon is desired it must be done through harpoons setup function
require("harpoon").setup({ ... })
Global Settings
here are all the available global settings with their default values
global_settings = {
-- sets the marks upon calling `toggle` on the ui, instead of require `:w`.
save_on_toggle = false,
-- saves the harpoon file upon every change. disabling is unrecommended.
save_on_change = true,
-- sets harpoon to run the command immediately as it's passed to the terminal when calling `sendCommand`.
enter_on_sendcmd = false,
-- closes any tmux windows harpoon that harpoon creates when you close Neovim.
tmux_autoclose_windows = false,
-- filetypes that you want to prevent from adding to the harpoon list menu.
excluded_filetypes = { "harpoon" },
-- set marks specific to each git branch inside git repository
mark_branch = false,
-- enable tabline with harpoon marks
tabline = false,
tabline_prefix = " ",
tabline_suffix = " ",
}
logs are written to harpoon.log within the nvim cache path (:echo stdpath("cache"))
available log levels are trace, debug, info, warn, error, or fatal. warn is default
log level can be set with vim.g.harpoon_log_level (must be beforesetup())
launching nvim with HARPOON_LOG=debug nvim takes precedence over vim.g.harpoon_log_level.
invalid values default back to warn.
⇁ Others
How do Harpoon marks differ from vim global marks
they serve a similar purpose however harpoon marks differ in a few key ways:
They auto update their position within the file
They are saved per project.
They can be hand edited vs replaced (swapping is easier)
The Motivation behind Harpoon terminals
I want to use the terminal since I can gF and gF to any errors arising
from execution that are within the terminal that are not appropriate for
something like dispatch. (not just running tests but perhaps a server that runs
for X amount of time before crashing).
I want the terminal to be persistent and I can return to one of many terminals
with some finger wizardry and reparse any of the execution information that was
not necessarily error related.
I would like to have commands that can be tied to terminals and sent them
without much thinking. Some sort of middle ground between vim-test and just
typing them into a terminal (configuring netflix's television project isn't
quite building and there are tons of ways to configure).
Use a dynamic width for the Harpoon popup menu
Sometimes the default width of 60 is not wide enough.
The following example demonstrates how to configure a custom width by setting
the menu's width relative to the current window's width.
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/ThePrimeagen/harpoon là nguồn chính thức.
ThePrimeagen/harpoon có bao nhiêu sao?
ThePrimeagen/harpoon có 9.2k sao GitHub — tải lại trang để xem số mới nhất, hoặc xem trực tiếp github.com/ThePrimeagen/harpoon. TopGit phản chiếu số sao của GitHub nhưng không cam kết đến từng phút.
ThePrimeagen/harpoon có phải mã nguồn mở không?
Có — ThePrimeagen/harpoon phát hành theo license MIT, nghĩa là mã nguồn mở để đọc, fork và (tùy license) tái sử dụng. Mã: github.com/ThePrimeagen/harpoon.
ThePrimeagen/harpoon có tag gì không?
Bản đồng bộ chưa ghi nhận topic GitHub nào cho ThePrimeagen/harpoon. GitHub topics hiển thị ở thanh bên phải trang repo — đó là nơi đáng kiểm tra nhất.
ThePrimeagen/harpoon có website riêng không?
TopGit chưa ghi nhận URL trang chủ cho ThePrimeagen/harpoon. Phần README ở tab phía trên thường có link demo, hoặc xem mô tả GitHub của repo.
ThePrimeagen/harpoon còn đang phát triển không?
Commit gần nhất trên ThePrimeagen/harpoon là 9 tháng trước (theo timestamp GitHub). Repo có 490 fork — một chỉ báo về mức độ quan tâm của cộng đồng.
Đọc đầy đủ README ở tab phía trên.
harpoon có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về harpoon.