serpl
ist eine TUI-Anwendung (Terminal User Interface), mit der Benutzer Schlüsselwörter in einem gesamten Ordner suchen und ersetzen können, ähnlich der in VS Code verfügbaren Funktionalität.
cargo install serpl
cargo install serpl --features ast_grep
serpl
Suchen Sie auf der Release-Seite nach den neuesten Binärdateien.
serpl
kann mit Homebrew installiert werden:
brew install serpl
serpl
kann mit pacman
aus den offiziellen Repositories installiert werden:
pacman -S serpl
serpl
ist seit 24.11 in nixpkgs enthalten und kann über Nix auf verschiedene Arten installiert werden:
Bei eigenständigen Nix-Setups :
nix profile install nixpkgs#serpl
Unter NixOS (über configuration.nix
oder ähnlich):
{ pkgs , ... } : {
environment . systemPackages = [ pkgs . serpl ] ;
}
Auf Home-Manager :
{ pkgs , ... } : {
home . packages = [ pkgs . serpl ] ;
}
serpl
serpl --project-root /path/to/project
Standardtastenbelegungen können über die Datei config.json
angepasst werden.
Tastenkombination | Aktion |
---|---|
Ctrl + c | Aufhören |
Ctrl + b | Helfen |
Tab | Wechseln Sie zwischen den Registerkarten |
Backtab | Wechseln Sie zu den vorherigen Registerkarten |
Ctrl + o | Prozessersetzung für alle Dateien |
r | Ersetzen Sie den Vorgang für die ausgewählte Datei oder Zeile |
Ctrl + n | Schalten Sie den Such- und Ersetzungsmodus um |
Enter | Suche ausführen (für große Ordner) |
g / Left / h | Gehen Sie an den Anfang der Liste |
G / Right / l | Gehen Sie zum Ende der Liste |
j / Down | Gehen Sie zum nächsten Element |
k / Up | Zum vorherigen Element wechseln |
/ | Suchergebnisliste |
d | Ausgewählte Datei oder Zeile löschen |
Esc | Verlassen Sie den aktuellen Bereich oder Dialog |
Enter (in Dialogen) / y | Aktion bestätigen |
Esc (in Dialogen) / n | Aktion abbrechen |
h , l , Tab (in Dialogen) | Navigieren Sie durch die Dialogoptionen |
serpl
verwendet eine Konfigurationsdatei, um Tastenkombinationen und andere Einstellungen zu verwalten. Standardmäßig kann der Pfad zur Konfigurationsdatei durch Ausführen serpl --version
ermittelt werden. Für die Konfiguration können Sie verschiedene Dateiformate verwenden, beispielsweise JSON, JSON5, YAML, TOML oder INI.
{
"keybindings" : {
"<Ctrl-d>" : " Quit " ,
"<Ctrl-c>" : " Quit " ,
"<Tab>" : " LoopOverTabs " ,
"<Backtab>" : " BackLoopOverTabs " ,
"<Ctrl-o>" : " ProcessReplace " ,
"<Ctrl-b>" : " ShowHelp "
}
}
{
keybindings : {
"<Ctrl-d>" : "Quit" ,
"<Ctrl-c>" : "Quit" ,
"<Tab>" : "LoopOverTabs" ,
"<Backtab>" : "BackLoopOverTabs" ,
"<Ctrl-o>" : "ProcessReplace" ,
"<Ctrl-b>" : "ShowHelp" ,
} ,
}
keybindings :
" <Ctrl-d> " : " Quit "
" <Ctrl-c> " : " Quit "
" <Tab> " : " LoopOverTabs "
" <Backtab> " : " BackLoopOverTabs "
" <Ctrl-o> " : " ProcessReplace "
" <Ctrl-b> " : " ShowHelp "
[ keybindings ]
"<Ctrl-d>" = " Quit "
"<Ctrl-c>" = " Quit "
"<Tab>" = " LoopOverTabs "
"<Backtab>" = " BackLoopOverTabs "
"<Ctrl-o>" = " ProcessReplace "
"<Ctrl-b>" = " ShowHelp "
[keybindings]
<Ctrl-d> = Quit
<Ctrl-c> = Quit
<Tab> = LoopOverTabs
<Backtab> = BackLoopOverTabs
<Ctrl-o> = ProcessReplace
<Ctrl-b> = ShowHelp
Sie können die Tastenkombinationen anpassen, indem Sie die Konfigurationsdatei im Format Ihrer Wahl ändern.
Tipp
Wenn das aktuelle Verzeichnis sehr groß ist, müssen Sie Enter
drücken, um die Suche zu starten.
/
zu durchsuchen.Ctrl + b
, um den Hilfedialog anzuzeigen.Ctrl + o
um den Ersetzungsvorgang für alle Dateien durchzuführen.r
, um den Ersetzungsvorgang für die ausgewählte Datei oder Zeile durchzuführen.Ctrl + n
um zwischen den Such- und Ersetzungsmodi zu wechseln.g
, G
, j
und k
, um durch die Suchergebnisse zu navigieren.d
-Taste löschen Sie die ausgewählte Datei oder Zeile. Schauen Sie sich das Plugin toggleterm.nvim für Neovim an, das ein Terminal bereitstellt, das mit einer Tastenkombination umgeschaltet werden kann. Oder Sie können die folgende Konfiguration verwenden, wenn Sie AstroNvim verwenden:
return {
" akinsho/toggleterm.nvim " ,
cmd = { " ToggleTerm " , " TermExec " },
dependencies = {
{
" AstroNvim/astrocore " ,
opts = function ( _ , opts )
local maps = opts . mappings
local astro = require " astrocore "
maps . n [ " <Leader>t " ] = vim . tbl_get ( opts , " _map_sections " , " t " )
local serpl = {
callback = function ()
astro . toggle_term_cmd " serpl "
end ,
desc = " ToggleTerm serpl " ,
}
maps . n [ " <Leader>sr " ] = { serpl . callback , desc = serpl . desc }
maps . n [ " <Leader>tf " ] = { " <Cmd>ToggleTerm direction=float<CR> " , desc = " ToggleTerm float " }
maps . n [ " <Leader>th " ] = { " <Cmd>ToggleTerm size=10 direction=horizontal<CR> " , desc = " ToggleTerm horizontal split " }
maps . n [ " <Leader>tv " ] = { " <Cmd>ToggleTerm size=80 direction=vertical<CR> " , desc = " ToggleTerm vertical split " }
maps . n [ " <F7> " ] = { ' <Cmd>execute v:count . "ToggleTerm"<CR> ' , desc = " Toggle terminal " }
maps . t [ " <F7> " ] = { " <Cmd>ToggleTerm<CR> " , desc = " Toggle terminal " }
maps . i [ " <F7> " ] = { " <Esc><Cmd>ToggleTerm<CR> " , desc = " Toggle terminal " }
maps . n [ " <C-'> " ] = { ' <Cmd>execute v:count . "ToggleTerm"<CR> ' , desc = " Toggle terminal " }
maps . t [ " <C-'> " ] = { " <Cmd>ToggleTerm<CR> " , desc = " Toggle terminal " }
maps . i [ " <C-'> " ] = { " <Esc><Cmd>ToggleTerm<CR> " , desc = " Toggle terminal " }
end ,
},
},
opts = {
highlights = {
Normal = { link = " Normal " },
NormalNC = { link = " NormalNC " },
NormalFloat = { link = " NormalFloat " },
FloatBorder = { link = " FloatBorder " },
StatusLine = { link = " StatusLine " },
StatusLineNC = { link = " StatusLineNC " },
WinBar = { link = " WinBar " },
WinBarNC = { link = " WinBarNC " },
},
size = 10 ,
--- @param t Terminal
on_create = function ( t )
vim . opt_local . foldcolumn = " 0 "
vim . opt_local . signcolumn = " no "
if t . hidden then
local toggle = function () t : toggle () end
vim . keymap . set ({ " n " , " t " , " i " }, " <C-'> " , toggle , { desc = " Toggle terminal " , buffer = t . bufnr })
vim . keymap . set ({ " n " , " t " , " i " }, " <F7> " , toggle , { desc = " Toggle terminal " , buffer = t . bufnr })
end
end ,
shading_factor = 2 ,
direction = " float " ,
float_opts = { border = " rounded " },
},
}
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Einzelheiten finden Sie in der LICENSE-Datei.
(In Bearbeitung)