Всегда иметь хороший вид на разделенные окна
ПРИМЕЧАНИЕ . Для справки этого экрана функционирует размеры, установленные на 40 строк и 120 столбцов.
Смотрите визуальную демонстрацию каждой функции фокуса здесь .
Вот фрагменты кода для некоторых общих методов установки (используйте только один):
| GitHub Repo | Ветвь | Код фрагмент |
|---|---|---|
| Библиотека Focus.nvim ' | Основной | { 'nvim-focus/focus.nvim', version = false }, |
| Стабильный | { 'nvim-focus/focus.nvim', version = '*' }, |
| GitHub Repo | Ветвь | Код фрагмент |
|---|---|---|
| Библиотека Focus.nvim ' | Основной | use 'nvim-focus/focus.nvim' |
| Стабильный | use { 'nvim-focus/focus.nvim', branch = 'stable' } |
| GitHub Repo | Ветвь | Код фрагмент |
|---|---|---|
| Библиотека 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 } })Установите Focus QuickFix Height
-- 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 } })Установите Focus Auto относительные числа
-- 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 } })Установите Focus Auto Hybrid Numbers
-- 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 } })Установите Focus Auto Cursor Line
-- Displays a cursorline in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { cursorline = false } })Установить столбец курсора фокуса
-- 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 '
}
}
})Установите столбец автофорета Focus
-- 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 ).
Если вы хотите отключить фокус для определенных типов буфера или файлов, вы можете сделать это, настройка AutoCommands ( :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 | Перейдите к существующему или создайте новое разделение справа от текущего окна + открыть файл или пользовательскую команду. |
:FocusEqualise | Временно выравнивает расколы, поэтому они имеют одинаковую ширину/высоту. |
:FocusMaximise | Временно максимизирует сфокусированное окно. |
:FocusMaxOrEqual | Переключаются между выравнивающимися расщеплениями или максимизированным сфокусированным окном. |
Focus позволяет вам хорошо разделить окна на окна с плиточными окнами и размером в соответствии с золотым соотношением.
+----------------+------------+
| | S1 |
| | |
| +------------+
| | |
| MAIN PANE | S2 |
| | |
| | |
| | |
+----------------+------------+
Чтобы получить это представление, вы нажмете комбинацию клавиш 2 раза.
<Cl> keymap ( ' n ' , ' <c-l> ' , function ()
require ( ' focus ' ). split_nicely ()
end , { desc = ' split nicely ' }) Кроме того, вы можете открыть файл или запустить пользовательскую команду с помощью :FocusSplitNicely Command
Открывает файл в разделении, созданном с помощью команды FocusSplitNicely
:FocusSplitNicely README.md
Открывает окно терминала в разделении, созданном командой FocusSplitNicely с использованием CMD ARG для запуска пользовательской команды
:FocusSplitNicely cmd term
Вместо того, чтобы беспокоиться о нескольких командах и ярлыках, просто подумайте о том, чтобы развязать, в каком направлении вы хотели бы пойти .
Называя команду разделения фокуса, т.е. 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
У меня небольшой дисплей, и я обнаружил, что расщепления слишком сильно изменяются
Если, например, ваше разрешение экрана составляет 1024x768 -> IE на меньшей стороне, вы можете заметить, что фокус по умолчанию может максимизировать окно слишком сильно .
То есть окно будет в некотором роде, а некоторые другие расколы из -за ограниченного экрана недвижимости. Это не проблема с фокусом, а проблема с минимальной экраной недвижимость. В этом случае вы можете просто уменьшить ширину/высоту фокуса.
Окно QuickFix открывается в правом разделении всегда. Это вызвано Focus.lua?
Нет. Это задокументированное проектное решение от Core Vim, это может быть что -то, что можно скорректировать вверх по течению.
А пока вы можете открыть окно QuickFix, занимающего полную ширину окна :botright copen
Я попытался сфокусироваться на ленивом нагрузке :FocusToggle , но мне нужно снова переключить его, чтобы получить автоматическую работу
Обратите внимание, что если вы ленивая загрузка с командой :FocusToggle , он будет загружать фокус, но изначально отключите его. Смотрите #34.
Это связано с тем, что фокус переключается по умолчанию при загрузке фокуса, поэтому, если вы загружаете его, а затем запустите команду :FocusToggle , она снова переключает его.
Пожалуйста, перед отправкой PR -установки Stylua и запустите его в корневой папке focus.nvim .
stylua . Это отформатирует код в соответствии с руководящими принципами, установленными в .stylua.toml .
Вы можете запустить тесты, используя make test если вы инициализируете подмодулы GIT.