دائمًا ما يكون لديك منظر جميل على النوافذ المقسمة
ملاحظة : للرجوع إليها ، تم تعيين أبعاد لقطات الشاشة على 40 صفًا و 120 عمودًا.
شاهد عرضًا مرئيًا لكل ميزة تركيز هنا .
فيما يلي قصاصات التعليمات البرمجية لبعض طرق التثبيت الشائعة (استخدم واحدة فقط):
| جيثب ريبو | فرع | رمز مقتطف |
|---|---|---|
| مكتبة "Focus.nvim" | رئيسي | { 'nvim-focus/focus.nvim', version = false }, |
| مستقر | { 'nvim-focus/focus.nvim', version = '*' }, |
| جيثب ريبو | فرع | رمز مقتطف |
|---|---|---|
| مكتبة "Focus.nvim" | رئيسي | use 'nvim-focus/focus.nvim' |
| مستقر | use { 'nvim-focus/focus.nvim', branch = 'stable' } |
| جيثب ريبو | فرع | رمز مقتطف |
|---|---|---|
| مكتبة "Focus.nvim" | رئيسي | Plug 'nvim-focus/focus.nvim' |
| مستقر | Plug("nvim-focus/focus.nvim", {["tag"]="stable"}) -- stable should be the latest stable version, as of 16th july 2024, it's v1.0.0 |
للإعداد الأساسي مع جميع البطاريات بما في ذلك:
require ( " focus " ). setup ()يمكن تمرير التكوين إلى وظيفة الإعداد. فيما يلي مثال على الإعدادات الافتراضية:
require ( " focus " ). setup ({
enable = true , -- Enable module
commands = true , -- Create Focus commands
autoresize = {
enable = true , -- Enable or disable auto-resizing of splits
width = 0 , -- Force width for the focused window
height = 0 , -- Force height for the focused window
minwidth = 0 , -- Force minimum width for the unfocused window
minheight = 0 , -- Force minimum height for the unfocused window
height_quickfix = 10 , -- Set the height of quickfix panel
},
split = {
bufnew = false , -- Create blank buffer for new split windows
tmux = false , -- Create tmux splits instead of neovim splits
},
ui = {
number = false , -- Display line numbers in the focussed window only
relativenumber = false , -- Display relative line numbers in the focussed window only
hybridnumber = false , -- Display hybrid line numbers in the focussed window only
absolutenumber_unfocussed = false , -- Preserve absolute numbers in the unfocussed windows
cursorline = true , -- Display a cursorline in the focussed window only
cursorcolumn = false , -- Display cursorcolumn in the focussed window only
colorcolumn = {
enable = false , -- Display colorcolumn in the foccused window only
list = ' +1 ' , -- Set the comma-saperated list for the colorcolumn
},
signcolumn = true , -- Display signcolumn in the focussed window only
winhighlight = false , -- Auto highlighting for focussed/unfocussed windows
}
})لاحظ لإدارة طرق عرض النوافذ عند تغيير الحجم ، انظر
:h splitkeep.
بالنسبة لمستخدمي Neovim> = 0.10 ، يوصى باستخدامsplitkeep=cursor.
لمستخدمي Neovim <= 0.8 ، يوصى باستخدام المكون الإضافي الاستقرار. بالنسبة لمستخدمي Lazyvim ، قاموا بتعيينopt.winminwidth = 5في الخيارات الافتراضية قد يتسبب في تعارض مع الإضافات إدارة الجلسة.
تمكين/تعطيل التركيز
-- Completely disable this plugin
-- Default: true
require ( " focus " ). setup ({ enable = false })تمكين/تعطيل أوامر التركيز
-- This not export :Focus* commands
-- Default: true
require ( " focus " ). setup ({ commands = false })تمكين/تعطيل نافذة التركيز التلقائي
-- The focussed window will no longer automatically resize. Other focus features are still available
-- Default: true
require ( " focus " ). setup ({ autoresize = { enable = false } })تعيين عرض التركيز
-- Force width for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { width = 120 } })تعيين الحد الأدنى للتراكم
-- Force minimum width for the unfocused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { minwidth = 80 } })ضبط ارتفاع التركيز
-- Force height for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { height = 40 } })تعيين الحد الأدنى للارتفاع التركيز
-- Force minimum height for the unfocused window
-- Default: 0
require ( " focus " ). setup ({ autoresize = { minheight = 10 } })قم بتعيين ارتفاع QuickFix
-- Sets the height of quickfix panel, in case you pass the height to
-- `:copen <height>`
-- Default: 10
require ( " focus " ). setup ({ autoresize = { height_quickfix = 10 })عند إنشاء نافذة تقسيم جديدة ، لا تُهيِّلها كمخزن مؤقت فارغ
-- True: When a :Focus.. command creates a new split window, initialise it as a new blank buffer
-- False: When a :Focus.. command creates a new split, retain a copy of the current window in the new window
-- Default: false
require ( " focus " ). setup ({ split = { bufnew = true } })تعيين أرقام السيارات التركيز
-- Displays line numbers in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { number = false } })قم بتعيين أرقام نسبية للسيارات
-- Displays relative line numbers in the focussed window only
-- Not displayed in unfocussed windows
-- See :help relativenumber
-- Default: false
require ( " focus " ). setup ({ ui = { relativenumber = true } })قم بتعيين أرقام هجين تلقائي
-- Displays hybrid line numbers in the focussed window only
-- Not displayed in unfocussed windows
-- Combination of :help relativenumber, but also displays the line number of the
-- current line only
-- Default: false
require ( " focus " ). setup ({ ui = { hybridnumber = true } })تعيين أرقام المطلقة
-- Preserve absolute numbers in the unfocussed windows
-- Works in combination with relativenumber or hybridnumber
-- Default: false
require ( " focus " ). setup ({ ui = { absolutenumber_unfocussed = true } })عند إنشاء نافذة تقسيم جديدة ، استخدم Tmux Split بدلاً من Neovim
-- True: Create tmux splits instead of neovim splits
-- False: Create neovim split windows
-- Default: false
require ( " focus " ). setup ({ split = { tmux = true } })قم بتعيين خط المؤشر التاسع للتركيز
-- Displays a cursorline in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { cursorline = false } })قم بتعيين عمود مؤشر Auto Focus
-- Displays a cursor column in the focussed window only
-- See :help cursorcolumn for more options
-- Default: false
require ( " focus " ). setup ({ ui = { cursorcolumn = true } })اضبط عمود لون التركيز التلقائي
-- Displays a color column in the focussed window only
-- See :help colorcolumn for more options
-- Default: enable = false, list = '+1'
require ( " focus " ). setup ({
ui = {
colorcolumn = {
enable = true ,
list = ' +1,+2 '
}
}
})اضبط عمود علامة التركيز التلقائي
-- Displays a sign column in the focussed window only
-- Gets the vim variable setcolumn when focus.setup() is run
-- See :help signcolumn for more options e.g :set signcolum=yes
-- Default: true, signcolumn=auto
require ( " focus " ). setup ({ ui = { signcolumn = false } })اضبط تسليط الضوء على نافذة التركيز
-- Enable auto highlighting for focussed/unfocussed windows
-- Default: false
require ( " focus " ). setup ({ ui = { winhighlight = true } })
-- By default, the highlight groups are setup as such:
-- hi default link FocusedWindow VertSplit
-- hi default link UnfocusedWindow Normal
-- To change them, you can link them to a different highlight group, see
-- `:help hi-default` for more info.
vim . highlight . link ( ' FocusedWindow ' , ' CursorLine ' , true )
vim . highlight . link ( ' UnfocusedWindow ' , ' VisualNOS ' , true ) يمكن تعطيل التركيز عن طريق تعيين متغير لنافذة واحدة فقط ، ( vim.w.focus_disable = true ) ، فقط مخزن مؤقت واحد ( vim.b.focus_disable = true ) ، أو عالميًا ( vim.g.focus_disable = true ).
إذا كنت ترغب في تعطيل التركيز لبعض أنواع المخزن المؤقت أو الملفات ، فيمكنك القيام بذلك عن طريق إعداد التوصيل التلقائي ( :help autocmd ) في التكوين الخاص بك.
هنا مثال:
local ignore_filetypes = { ' neo-tree ' }
local ignore_buftypes = { ' nofile ' , ' prompt ' , ' popup ' }
local augroup =
vim . api . nvim_create_augroup ( ' FocusDisable ' , { clear = true })
vim . api . nvim_create_autocmd ( ' WinEnter ' , {
group = augroup ,
callback = function ( _ )
if vim . tbl_contains ( ignore_buftypes , vim . bo . buftype )
then
vim . w . focus_disable = true
else
vim . w . focus_disable = false
end
end ,
desc = ' Disable focus autoresize for BufType ' ,
})
vim . api . nvim_create_autocmd ( ' FileType ' , {
group = augroup ,
callback = function ( _ )
if vim . tbl_contains ( ignore_filetypes , vim . bo . filetype ) then
vim . b . focus_disable = true
else
vim . b . focus_disable = false
end
end ,
desc = ' Disable focus autoresize for FileType ' ,
})لمزيد من المعلومات حول الأوامر أدناه ، قم بالتمرير لأسفل لرؤيتها موصوفة بمزيد من التفصيل
| يأمر | وصف |
|---|---|
:FocusDisable | تعطيل البرنامج المساعد لكل جلسة. سيتم تطبيع الانقسامات مرة أخرى إلى الإعدادات الافتراضية ثم متباعدة بالتساوي. |
:FocusEnable | تمكين البرنامج المساعد لكل جلسة. سيتم تغيير حجم الانقسامات مرة أخرى إلى التكوينات أو الإعدادات الافتراضية إذا لم يتم تعيينها. |
:FocusToggle | تبديل التركيز (على الصعيد العالمي) وإيقاف تشغيله مرة أخرى. |
:FocusSplitNicely | تقسيم نافذة بناءً على قاعدة النسبة الذهبية. |
:FocusSplitCycle | إذا لم يكن هناك انشقاقات ، فقم بإنشاء واحدة وانتقل إليها ، أو تقسيم ركز الدورة. :FocusSplitCycle reverse اتجاه عقارب الساعة |
:FocusDisableWindow | تعطيل تغيير حجم النافذة الحالية (Winnr). |
:FocusEnableWindow | تمكين تغيير حجم النافذة الحالية (winnr). |
:FocusToggleWindow | تبديل التركيز على وإيقاف مرة أخرى على أساس النافذة. |
:FocusDisableBuffer | تعطيل تغيير حجم المخزن المؤقت الحالي (BUFNR). |
:FocusEnableBuffer | تمكين تغيير حجم المخزن المؤقت الحالي (BUFNR). |
:FocusToggleBuffer | تبديل التركيز على وإيقاف مرة أخرى على أساس المخزن المؤقت. |
:FocusSplitLeft | انتقل إلى موجود أو إنشاء تقسيم جديد إلى يسار نافذتك الحالية + ملف مفتوح أو أمر مخصص. |
:FocusSplitDown | انتقل إلى موجود أو إنشاء تقسيم جديد إلى أسفل نافذتك الحالية + ملف فتح أو أمر مخصص. |
:FocusSplitUp | انتقل إلى موجود أو إنشاء تقسيم جديد إلى الجزء العلوي من نافذتك الحالية + ملف مفتوح أو أمر مخصص. |
:FocusSplitRight | انتقل إلى موجود أو إنشاء تقسيم جديد إلى يمين نافذة الملف الحالي + ملف OPEN أو أمر مخصص. |
:FocusEqualise | يساوي مؤقتًا الانقسامات بحيث تكون جميعها من خلال العرض/الارتفاع المماثل. |
:FocusMaximise | يزيد مؤقتًا من النافذة المركزة. |
:FocusMaxOrEqual | تبديل بين تقسيم الانقسامات أو النافذة المركزة إلى الحد الأقصى. |
يتيح لك Focus تقسيم Windows إلى Windows المبللة بشكل جيد وحجمها وفقًا للنسبة الذهبية.
+----------------+------------+
| | S1 |
| | |
| +------------+
| | |
| MAIN PANE | S2 |
| | |
| | |
| | |
+----------------+------------+
للحصول على هذا العرض ، ستضغط على مجموعة المفاتيح مرتين.
<Cl> keymap ( ' n ' , ' <c-l> ' , function ()
require ( ' focus ' ). split_nicely ()
end , { desc = ' split nicely ' }) بالإضافة إلى ذلك ، يمكنك فتح ملف أو تشغيل أمر مخصص باستخدام أمر :FocusSplitNicely
يفتح ملفًا في الانقسام الذي تم إنشاؤه بواسطة FocusSplitNicely
:FocusSplitNicely README.md
يفتح نافذة طرفية في الانقسام الذي تم إنشاؤه بواسطة أمر FocusSplitNicely باستخدام CMD ARG لتشغيل أمر مخصص
:FocusSplitNicely cmd term
بدلاً من القلق بشأن أوامر واختصارات متعددة ، ما عليك سوى التفكير في الانقسامات حول الاتجاه الذي ترغب في الذهاب إليه .
استدعاء أمر Focus Split IE: سوف يقوم Focussplitright بإجراء أحد أمرين ، وسيحاول الانتقال إلى النافذة في الاتجاه المحدد. خلاف ذلك ، إذا لم تكن هناك نافذة في الاتجاه المحدد بالنسبة إلى النافذة الحالية ، فستقوم بدلاً من ذلك بإنشاء نافذة مخزن مؤقت فارغة جديدة في الاتجاه المحدد ، ثم انتقل إلى تلك النافذة.
local focusmap = function ( direction )
vim . keymap . set ( ' n ' , ' <Leader> ' .. direction , function ()
require ( ' focus ' ). split_command ( direction )
end , { desc = string.format ( ' Create or move to split (%s) ' , direction ) })
end
-- Use `<Leader>h` to split the screen to the left, same as command FocusSplitLeft etc
focusmap ( ' h ' )
focusmap ( ' j ' )
focusmap ( ' k ' )
focusmap ( ' l ' ) بالإضافة إلى ذلك ، يمكنك فتح ملف أو تشغيل أمر مخصص باستخدام :FocusSplit<direction>
يفتح ملفًا في تقسيم تم إنشاؤه أو نقله إليه
:FocusSplitRight README.md
فتح نافذة طرفية باستخدام CMD Arg لتشغيل أمر مخصص في تقسيم تم إنشاؤه أو نقله إليه
:FocusSplitDown cmd term
لدي عرض صغير وأجد أن الانقسامات يتم تغيير حجمها كثيرًا
إذا كانت دقة الشاشة على سبيل المثال هي 1024 × 768 -> أي على الجانب الأصغر ، فقد تلاحظ أن التركيز بشكل افتراضي يمكن أن يزيد من النافذة إلى الحد الأقصى .
أي أن النافذة ستقوم نوعًا من "سحق" بعض الانقسامات الأخرى بسبب العقارات المحدودة على الشاشة. هذه ليست مشكلة مع التركيز ، ولكن مشكلة مع الحد الأدنى من العقارات على الشاشة. في هذه الحالة ، يمكنك ببساطة تقليل عرض/ارتفاع التركيز.
يتم فتح نافذة QuickFix في الانقسام الأيمن دائمًا. هل هذا ناتج عن التركيز. lua؟
لا. هذا قرار تصميم موثق من قبل Core Vim ، قد يكون هذا شيئًا يمكن تعديله في المنبع.
في غضون ذلك ، يمكنك فتح نافذة QuickFix التي تشغل العرض الكامل للنافذة مع :botright copen
حاولت التركيز على التحميل الكسول مع :FocusToggle ، لكنني بحاجة إلى تبديله مرة أخرى للحصول على العمل التلقائي
يرجى ملاحظة أنه إذا كنت كسولًا مع الأمر :FocusToggle ، فسيتم تحميل التركيز ، ولكنه سيقوم بتبديله في البداية. انظر #34.
وذلك لأن التركيز يتم تبديله بشكل افتراضي عند تحميل التركيز ، لذلك إذا قمت بتحميله ثم قم بتشغيل الأمر :FocusToggle ، فإنه يقوم بتبديله مرة أخرى.
من فضلك قبل إرسال PR تثبيت stylua وقم بتشغيله في المجلد الجذر لـ focus.nvim .
stylua . سيؤدي ذلك إلى تنسيق الكود وفقًا للإرشادات المحددة في .stylua.toml .
يمكنك تشغيل الاختبارات باستخدام make test إذا قمت بتهيئة النسيج الفرعي GIT.