serpl
es una aplicación de interfaz de usuario de terminal (TUI) que permite a los usuarios buscar y reemplazar palabras clave en una carpeta completa, similar a la funcionalidad disponible en VS Code.
cargo install serpl
cargo install serpl --features ast_grep
serpl
Consulte la página de lanzamientos para conocer los archivos binarios más recientes.
serpl
se puede instalar usando Homebrew:
brew install serpl
serpl
se puede instalar desde los repositorios oficiales usando pacman
:
pacman -S serpl
serpl
está incluido en nixpkgs desde 24.11 y se puede instalar a través de Nix de diferentes maneras:
En configuraciones Nix independientes :
nix profile install nixpkgs#serpl
En NixOS (a través de configuration.nix
o similar):
{ pkgs , ... } : {
environment . systemPackages = [ pkgs . serpl ] ;
}
En Home-Manager :
{ pkgs , ... } : {
home . packages = [ pkgs . serpl ] ;
}
serpl
serpl --project-root /path/to/project
Las combinaciones de teclas predeterminadas se pueden personalizar a través del archivo config.json
.
Combinación de teclas | Acción |
---|---|
Ctrl + c | Abandonar |
Ctrl + b | Ayuda |
Tab | Cambiar entre pestañas |
Backtab | Cambiar a pestañas anteriores |
Ctrl + o | Procesar reemplazo para todos los archivos |
r | Procesar reemplazo para el archivo o línea seleccionados |
Ctrl + n | Alternar modos de búsqueda y reemplazo |
Enter | Ejecutar búsqueda (para carpetas grandes) |
g / Left / h | Ir al principio de la lista |
G / Right / l | Ir al final de la lista |
j / Down | Pasar al siguiente elemento |
k / Up | Ir al elemento anterior |
/ | Lista de resultados de búsqueda |
d | Eliminar archivo o línea seleccionada |
Esc | Salir del panel o cuadro de diálogo actual |
Enter (en cuadros de diálogo) / y | Confirmar acción |
Esc (en cuadros de diálogo) / n | Cancelar acción |
h , l , Tab (en cuadros de diálogo) | Navegar por las opciones de diálogo |
serpl
utiliza un archivo de configuración para administrar combinaciones de teclas y otras configuraciones. De forma predeterminada, la ruta al archivo de configuración se puede encontrar ejecutando serpl --version
. Puede utilizar varios formatos de archivo para la configuración, como JSON, JSON5, YAML, TOML o 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
Puede personalizar las combinaciones de teclas modificando el archivo de configuración en el formato que elija.
Consejo
Si el directorio actual es considerablemente grande, debe hacer clic Enter
para iniciar la búsqueda.
/
.Ctrl + b
para mostrar el cuadro de diálogo de ayuda.Ctrl + o
para procesar el reemplazo de todos los archivos.r
para procesar el reemplazo del archivo o línea seleccionado.Ctrl + n
para alternar entre los modos de búsqueda y reemplazo.g
, G
, j
y k
para navegar por los resultados de la búsqueda.d
para eliminar el archivo o línea seleccionada. Consulte el complemento toggleterm.nvim para Neovim, que proporciona un terminal que se puede alternar con una combinación de teclas. O puede utilizar la siguiente configuración, si está utilizando AstroNvim:
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 " },
},
}
Este proyecto está bajo la licencia MIT. Consulte el archivo de LICENCIA para obtener más detalles.
(WIP)