serpl
هو تطبيق واجهة مستخدم طرفية (TUI) يسمح للمستخدمين بالبحث عن الكلمات الرئيسية واستبدالها في مجلد كامل، على غرار الوظيفة المتوفرة في VS Code.
cargo install serpl
cargo install serpl --features ast_grep
serpl
تحقق من صفحة الإصدارات للحصول على أحدث الثنائيات.
يمكن تثبيت serpl
باستخدام Homebrew:
brew install serpl
يمكن تثبيت serpl
من المستودعات الرسمية باستخدام pacman
:
pacman -S serpl
تم تضمين serpl
في nixpkgs منذ 24.11، ويمكن تثبيته عبر Nix بطرق مختلفة:
في إعدادات Nix المستقلة :
nix profile install nixpkgs#serpl
على NixOS (عبر configuration.nix
أو ما شابه):
{ pkgs , ... } : {
environment . systemPackages = [ pkgs . serpl ] ;
}
على مدير المنزل :
{ pkgs , ... } : {
home . packages = [ pkgs . serpl ] ;
}
serpl
serpl --project-root /path/to/project
يمكن تخصيص روابط المفاتيح الافتراضية من خلال ملف config.json
.
تركيبة المفاتيح | فعل |
---|---|
Ctrl + c | يترك |
Ctrl + b | يساعد |
Tab | التبديل بين علامات التبويب |
Backtab | التبديل إلى علامات التبويب السابقة |
Ctrl + o | عملية استبدال لجميع الملفات |
r | عملية استبدال الملف أو الخط المحدد |
Ctrl + n | تبديل أوضاع البحث واستبدالها |
Enter | تنفيذ البحث (للمجلدات الكبيرة) |
g / Left / h | انتقل إلى أعلى القائمة |
G / Right / l | انتقل إلى أسفل القائمة |
j / Down | الانتقال إلى العنصر التالي |
k / Up | الانتقال إلى العنصر السابق |
/ | قائمة نتائج البحث |
d | حذف الملف أو الخط المحدد |
Esc | الخروج من الجزء أو مربع الحوار الحالي |
Enter (في مربعات الحوار) / y | تأكيد الإجراء |
Esc (في مربعات الحوار) / n | إلغاء الإجراء |
h ، l ، Tab (في مربعات الحوار) | انتقل إلى خيارات الحوار |
يستخدم serpl
ملف تكوين لإدارة روابط المفاتيح والإعدادات الأخرى. افتراضيًا، يمكن العثور على المسار إلى ملف التكوين عن طريق تشغيل serpl --version
. يمكنك استخدام تنسيقات ملفات مختلفة للتكوين، مثل JSON، أو JSON5، أو YAML، أو TOML، أو 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
يمكنك تخصيص روابط المفاتيح عن طريق تعديل ملف التكوين بالتنسيق الذي تختاره.
نصيحة
إذا كان الدليل الحالي كبيرًا جدًا، فيجب عليك النقر فوق Enter
لبدء البحث.
/
.Ctrl + b
لعرض مربع حوار المساعدة.Ctrl + o
لمعالجة الاستبدال لجميع الملفات.r
لمعالجة الاستبدال للملف أو الخط المحدد.Ctrl + n
للتبديل بين وضعي البحث والاستبدال.g
و G
و j
و k
للتنقل خلال نتائج البحث.d
لحذف الملف أو السطر المحدد. تحقق من المكوّن الإضافي toggleterm.nvim لـ Neovim، والذي يوفر محطة يمكن تبديلها بربط المفتاح. أو يمكنك استخدام التكوين التالي، إذا كنت تستخدم 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 " },
},
}
هذا المشروع مرخص بموجب ترخيص MIT. راجع ملف الترخيص للحصول على التفاصيل.
(ويب)