Siempre tenga una buena vista sobre sus ventanas divididas
Nota : Para referencia, este screencast presenta dimensiones establecidas en 40 filas y 120 columnas.
Vea una función de demostración visual de cada enfoque aquí .
Aquí hay fragmentos de código para algunos métodos de instalación comunes (use solo uno):
| Repositorio de Github | Rama | Fragmento de código |
|---|---|---|
| Biblioteca 'Focus.nvim' | Principal | { 'nvim-focus/focus.nvim', version = false }, |
| Estable | { 'nvim-focus/focus.nvim', version = '*' }, |
| Repositorio de Github | Rama | Fragmento de código |
|---|---|---|
| Biblioteca 'Focus.nvim' | Principal | use 'nvim-focus/focus.nvim' |
| Estable | use { 'nvim-focus/focus.nvim', branch = 'stable' } |
| Repositorio de Github | Rama | Fragmento de código |
|---|---|---|
| Biblioteca 'Focus.nvim' | Principal | Plug 'nvim-focus/focus.nvim' |
| Estable | Plug("nvim-focus/focus.nvim", {["tag"]="stable"}) -- stable should be the latest stable version, as of 16th july 2024, it's v1.0.0 |
Para la configuración básica con todas las baterías incluidas:
require ( " focus " ). setup ()La configuración se puede pasar a la función de configuración. Aquí hay un ejemplo con la configuración predeterminada:
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
}
})Nota Para administrar las vistas de la ventana al cambiar el tamaño, consulte
:h splitkeep.
Para los usuarios de Neovim> = 0.10, se recomienda usarsplitkeep=cursor.
Para los usuarios de Neovim <= 0.8, se recomienda usar el complemento Stabilily. Para los usuarios de LazyVim, establecenopt.winminwidth = 5en opciones predeterminadas puede causar conflicto con los complementos de administración de sesión.
Habilitar/deshabilitar el enfoque
-- Completely disable this plugin
-- Default: true
require ( " focus " ). setup ({ enable = false })Comandos de enfoque de habilitar/deshabilitar
-- This not export :Focus* commands
-- Default: true
require ( " focus " ). setup ({ commands = false })Habilitar/deshabilitar la ventana de enfoque Autoresising
-- The focussed window will no longer automatically resize. Other focus features are still available
-- Default: true
require ( " focus " ). setup ({ autoresize = { enable = false } })Establecer ancho de enfoque
-- Force width for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { width = 120 } })Establecer un ancho mínimo de enfoque
-- Force minimum width for the unfocused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { minwidth = 80 } })Establecer altura de enfoque
-- Force height for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { height = 40 } })Establecer altura mínima de enfoque
-- Force minimum height for the unfocused window
-- Default: 0
require ( " focus " ). setup ({ autoresize = { minheight = 10 } })Establecer Focus Altura 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 })Al crear una nueva ventana dividida, hágalo/no la inicialice como un búfer vacío
-- 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 } })Establecer números automáticos de enfoque
-- Displays line numbers in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { number = false } })Establecer números relativos automáticos de enfoque
-- 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 } })Establecer números híbridos automáticos de enfoque
-- 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 } })Establecer números de preservación absoluta
-- Preserve absolute numbers in the unfocussed windows
-- Works in combination with relativenumber or hybridnumber
-- Default: false
require ( " focus " ). setup ({ ui = { absolutenumber_unfocussed = true } })Al crear una nueva ventana dividida, use TMUX Split en lugar de Neovim
-- True: Create tmux splits instead of neovim splits
-- False: Create neovim split windows
-- Default: false
require ( " focus " ). setup ({ split = { tmux = true } })Establecer 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 } })Establecer la columna de Cursor 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 } })Establecer la columna de color automático de enfoque
-- 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 '
}
}
})Establecer la columna de signo automático de enfoque
-- 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 } })Destacación de la ventana de enfoque establecida
-- 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 ) El enfoque se puede deshabilitar estableciendo una variable para una sola ventana, ( vim.w.focus_disable = true ), solo un búfer ( vim.b.focus_disable = true ), o globalmente ( vim.g.focus_disable = true ).
Si desea deshabilitar el enfoque para ciertos tipos de buffer o archivos, puede hacerlo configurando Autocommands ( :help autocmd ) en su configuración.
Aquí hay un ejemplo:
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 ' ,
})Para obtener más información sobre los comandos a continuación, desplácese hacia abajo para verlos, cada uno descrito con más detalle
| Dominio | Descripción |
|---|---|
:FocusDisable | Deshabilite el complemento por sesión. Las divisiones se normalizarán nuevamente a los valores predeterminados y luego espaciadas de manera uniforme. |
:FocusEnable | Habilite el complemento por sesión. Las divisiones se volverán a cambiar a sus configuraciones o valores predeterminados si no están establecidos. |
:FocusToggle | Alternar el enfoque (a nivel mundial) nuevamente. |
:FocusSplitNicely | Divida una ventana basada en la regla de la relación dorada. |
:FocusSplitCycle | Si no hay divisiones, cree una y muévete a él, de lo contrario, la división centrada en el ciclo. :FocusSplitCycle reverse para en sentido antihorario |
:FocusDisableWindow | Desactivar el cambio de tamaño de la ventana actual (Winnr). |
:FocusEnableWindow | Habilitar el cambio de tamaño de la ventana actual (WINNR). |
:FocusToggleWindow | Alternar el enfoque y apagado nuevamente por ventana. |
:FocusDisableBuffer | Deshabilite el cambio de tamaño para el búfer actual (BUFNR). |
:FocusEnableBuffer | Habilitar el cambio de tamaño para el búfer actual (BUFNR). |
:FocusToggleBuffer | Alternar el enfoque y apagado nuevamente por búfer. |
:FocusSplitLeft | Pase a existir o cree una nueva división a la izquierda de su ventana actual + archivo abierto o comando personalizado. |
:FocusSplitDown | Pase a existir o cree una nueva división en la parte inferior de su ventana actual + archivo abierto o comando personalizado. |
:FocusSplitUp | Pase a existir o cree una nueva división en la parte superior de su ventana actual + archivo abierto o comando personalizado. |
:FocusSplitRight | Pase a existir o cree una nueva división a la derecha de su ventana actual + archivo abierto o comando personalizado. |
:FocusEqualise | Iguala temporalmente las divisiones para que todas sean un ancho/altura similar. |
:FocusMaximise | Maximiza temporalmente la ventana enfocada. |
:FocusMaxOrEqual | Alternar entre las divisiones igualadas o la ventana enfocada maximizada. |
El enfoque le permite dividir las ventanas en ventanas de baldosas bien y dimensionadas de acuerdo con la relación dorada.
+----------------+------------+
| | S1 |
| | |
| +------------+
| | |
| MAIN PANE | S2 |
| | |
| | |
| | |
+----------------+------------+
Para obtener esta vista, presionaría la combinación de teclas 2 veces.
<Cl> keymap ( ' n ' , ' <c-l> ' , function ()
require ( ' focus ' ). split_nicely ()
end , { desc = ' split nicely ' }) Además, puede abrir un archivo o ejecutar un comando personalizado con el comando :FocusSplitNicely
Abre un archivo en la división creada por FocusSplitNicely Command
:FocusSplitNicely README.md
Abre una ventana de terminal en la división creada por el comando FocusSplitNicely utilizando el CMD Arg para ejecutar un comando personalizado
:FocusSplitNicely cmd term
En lugar de preocuparse por múltiples comandos y atajos, simplemente piense en las divisiones sobre qué dirección le gustaría ir .
Llamando a un comando de división de enfoque, es decir, Focussplitright hará una de las dos cosas, intentará moverse hacia la ventana en la dirección especificada. De lo contrario, si no existe una ventana en la dirección especificada en relación con la ventana actual , en su lugar creará una nueva ventana de búfer en blanco en la dirección especificada, y luego se moverá a esa ventana.
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 ' ) Además, puede abrir un archivo o ejecutar un comando personalizado con el comando :FocusSplit<direction>
Abre un archivo en una división que fue creada o movida a
:FocusSplitRight README.md
Abrir una ventana de terminal utilizando el CMD Arg para ejecutar un comando personalizado en una división que se creó o se movió a
:FocusSplitDown cmd term
Tengo una pequeña pantalla y estoy encontrando que las divisiones son redimensionadas demasiado
Si, por ejemplo, su resolución de pantalla es 1024x768 -> es decir, en el lado más pequeño, puede notar que el enfoque por defecto puede maximizar demasiado una ventana.
Es decir, la ventana "aplastará" algunas de sus otras divisiones debido a las propiedades inmobiliarias de pantalla limitada. Este no es un problema con el enfoque, sino un problema con bienes raíces de pantalla mínima. En este caso, simplemente puede reducir el ancho/altura del enfoque.
La ventana QuickFix se abre en la división derecha siempre. ¿Es esto causado por Focus.lua?
No. Esta es una decisión de diseño documentada de Core VIM, esto podría ser algo que se puede ajustar aguas arriba.
Mientras tanto, puede abrir una ventana QuickFix que ocupa el ancho completo de la ventana con :botright copen
Traté de enfoque de carga perezosa con :FocusToggle , pero necesito alternarlo nuevamente para que funcione automáticamente
Tenga en cuenta que si le carga perezosa con el comando :FocusToggle , cargará el enfoque, pero lo alternará inicialmente. Ver #34.
Esto se debe a que el enfoque se alterna de forma predeterminada cuando carga el enfoque, por lo que si lo carga y luego ejecuta el comando :FocusToggle , lo alternará nuevamente.
Antes de enviar un stylua de instalación de PR y ejecutarlo en la carpeta raíz de focus.nvim .
stylua . Esto formateará el código de acuerdo con las pautas establecidas en .stylua.toml .
Puede ejecutar las pruebas usando make test si inicializa los submódulos GIT.