Ayez toujours une belle vue sur vos fenêtres divisées
Remarque : Pour référence, les dimensions des caractéristiques screencast se définissent sur 40 lignes et 120 colonnes.
Voir une démonstration visuelle de chaque fonctionnalité de mise au point ici .
Voici des extraits de code pour certaines méthodes d'installation courantes (utilisez une seule):
| GitHub Repo | Bifurquer | Extrait de code |
|---|---|---|
| bibliothèque «focus.nvim» | Principal | { 'nvim-focus/focus.nvim', version = false }, |
| Écurie | { 'nvim-focus/focus.nvim', version = '*' }, |
| GitHub Repo | Bifurquer | Extrait de code |
|---|---|---|
| bibliothèque «focus.nvim» | Principal | use 'nvim-focus/focus.nvim' |
| Écurie | use { 'nvim-focus/focus.nvim', branch = 'stable' } |
| GitHub Repo | Bifurquer | Extrait de code |
|---|---|---|
| bibliothèque «focus.nvim» | Principal | Plug 'nvim-focus/focus.nvim' |
| Écurie | Plug("nvim-focus/focus.nvim", {["tag"]="stable"}) -- stable should be the latest stable version, as of 16th july 2024, it's v1.0.0 |
Pour la configuration de base avec toutes les piles incluses:
require ( " focus " ). setup ()La configuration peut être transmise à la fonction de configuration. Voici un exemple avec les paramètres par défaut:
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
}
})Remarque pour gérer les vues des fenêtres lors du redimensionnement, voir
:h splitkeep.
Pour les utilisateurs de Neovim> = 0,10, il est recommandé d'utilisersplitkeep=cursor.
Pour les utilisateurs de Neovim <= 0,8, il est recommandé d'utiliser le plugin Stabilize. Pour les utilisateurs de LazyVIM, ils définissentopt.winminwidth = 5dans les options par défaut peuvent entraîner des conflits avec les plugins de gestion de session.
Activer / désactiver la focalisation
-- Completely disable this plugin
-- Default: true
require ( " focus " ). setup ({ enable = false })Activer / désactiver les commandes de mise au point
-- This not export :Focus* commands
-- Default: true
require ( " focus " ). setup ({ commands = false })Activer / désactiver l'autorésiisation des fenêtres de mise au point
-- The focussed window will no longer automatically resize. Other focus features are still available
-- Default: true
require ( " focus " ). setup ({ autoresize = { enable = false } })Régler la largeur de mise au point
-- Force width for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { width = 120 } })Régler la largeur minimale de mise au point
-- Force minimum width for the unfocused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { minwidth = 80 } })Régler la hauteur de mise au point
-- Force height for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { height = 40 } })Régler la hauteur minimale de mise au point
-- Force minimum height for the unfocused window
-- Default: 0
require ( " focus " ). setup ({ autoresize = { minheight = 10 } })Régler Focus QuickFix Hauteur
-- Sets the height of quickfix panel, in case you pass the height to
-- `:copen <height>`
-- Default: 10
require ( " focus " ). setup ({ autoresize = { height_quickfix = 10 })Lors de la création d'une nouvelle fenêtre divisée, faites / ne l'initialisez pas comme un tampon vide
-- 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 } })Définir les numéros automobiles Focus
-- Displays line numbers in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { number = false } })Définir les numéros relatifs de l'auto Focus
-- 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 } })Définir les numéros hybrides Auto Focus
-- 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 } })Définir les nombres absolus de conservation
-- Preserve absolute numbers in the unfocussed windows
-- Works in combination with relativenumber or hybridnumber
-- Default: false
require ( " focus " ). setup ({ ui = { absolutenumber_unfocussed = true } })Lors de la création d'une nouvelle fenêtre divisée, utilisez TMUX Split au lieu de Neovim
-- True: Create tmux splits instead of neovim splits
-- False: Create neovim split windows
-- Default: false
require ( " focus " ). setup ({ split = { tmux = true } })Définir la ligne de curseur automatique focus
-- Displays a cursorline in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { cursorline = false } })Définir la colonne Focus Auto Cursor
-- Displays a cursor column in the focussed window only
-- See :help cursorcolumn for more options
-- Default: false
require ( " focus " ). setup ({ ui = { cursorcolumn = true } })Définir la colonne de couleur Auto Focus
-- 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 '
}
}
})Définir la colonne de panneau Auto 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 } })Définir la fenêtre de mise au point
-- 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 ) Le focus peut être désactivé en définissant une variable pour une seule fenêtre, ( vim.w.focus_disable = true ), un seul tampon ( vim.b.focus_disable = true ), ou global ( vim.g.focus_disable = true ).
Si vous souhaitez désactiver la mise au point pour certains types de tampon ou de fichiers, vous pouvez le faire en configurant les auto-communs ( :help autocmd ) dans votre configuration.
Voici un exemple:
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 ' ,
})Pour plus d'informations sur les commandes ci-dessous, faites défiler vers le bas pour les voir chacun décrit plus en détail
| Commande | Description |
|---|---|
:FocusDisable | Désactivez le plugin par session. Les divisions seront normalisées aux valeurs par défaut, puis espacées uniformément. |
:FocusEnable | Activez le plugin par session. Les fentes seront redimensionnées à vos configurations ou à vos défauts si elles ne sont pas définies. |
:FocusToggle | Basculez à nouveau (globalement) sur et à nouveau. |
:FocusSplitNicely | Divisez une fenêtre en fonction de la règle du ratio d'or. |
:FocusSplitCycle | S'il n'y a pas de divisions, créez-en un et passez-y, sinon divisé au cycle. :FocusSplitCycle reverse pour le sens antihoraire |
:FocusDisableWindow | Désactiver le redimensionnement de la fenêtre actuelle (WINNR). |
:FocusEnableWindow | Activer le redimensionnement de la fenêtre actuelle (WINNR). |
:FocusToggleWindow | Basculez à nouveau sur et à nouveau sur une base par fenêtre. |
:FocusDisableBuffer | Désactiver le redimensionnement pour le tampon actuel (BUFNR). |
:FocusEnableBuffer | Activer le redimensionnement pour le tampon actuel (BUFNR). |
:FocusToggleBuffer | Basculez à nouveau sur et à nouveau sur une base tampon. |
:FocusSplitLeft | Déplacez-vous vers existant ou créez une nouvelle répartition à gauche de votre fenêtre actuelle + fichier ouvrir ou commande personnalisée. |
:FocusSplitDown | Déplacez-vous vers existant ou créez une nouvelle répartition au bas de votre fenêtre actuelle + fichier ouvert ou commande personnalisée. |
:FocusSplitUp | Déplacez-vous vers existant ou créez une nouvelle répartition en haut de votre fenêtre actuelle + un fichier ouvrir ou une commande personnalisée. |
:FocusSplitRight | Passez à l'existant ou créez une nouvelle répartition à droite de votre fenêtre actuelle + fichier ouvrir ou une commande personnalisée. |
:FocusEqualise | Égalise temporairement les divisions afin qu'elles soient toutes de largeur / hauteur similaires. |
:FocusMaximise | Maximise temporairement la fenêtre focalisée. |
:FocusMaxOrEqual | Bascule entre les divisions égalisées ou la fenêtre focalisée maximisée. |
Focus vous permet de diviser les fenêtres carrelées bien et dimensionnées en fonction du rapport doré.
+----------------+------------+
| | S1 |
| | |
| +------------+
| | |
| MAIN PANE | S2 |
| | |
| | |
| | |
+----------------+------------+
Pour obtenir cette vue, vous appuyez 2 fois sur la combinaison de touches.
<Cl> keymap ( ' n ' , ' <c-l> ' , function ()
require ( ' focus ' ). split_nicely ()
end , { desc = ' split nicely ' }) De plus, vous pouvez ouvrir un fichier ou exécuter une commande personnalisée avec la commande :FocusSplitNicely
Ouvre un fichier dans la division créée par la commande FocusSplitNicely
:FocusSplitNicely README.md
Ouvre une fenêtre de terminal dans la fente créée par la commande FocusSplitNicely en utilisant le CMD Arg pour exécuter une commande personnalisée
:FocusSplitNicely cmd term
Au lieu de vous soucier de plusieurs commandes et raccourcis, pensez simplement aux divisions de la direction que vous aimeriez aller .
Appelant une commande de split de mise au point, c'est-à-dire: FocussPlitright fera l'une des deux choses, il tentera de passer à la fenêtre dans la direction spécifiée. Sinon, si aucune fenêtre n'existe dans la direction spécifiée par rapport à la fenêtre actuelle , elle créera à la place une nouvelle fenêtre de tampon vide dans la direction spécifiée, puis se déplacera vers cette fenêtre.
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 ' ) De plus, vous pouvez ouvrir un fichier ou exécuter une commande personnalisée avec la commande :FocusSplit<direction>
Ouvre un fichier dans une scission qui a été créée ou déplacée vers
:FocusSplitRight README.md
Ouvrant une fenêtre de terminal en utilisant le CMD Arg pour exécuter une commande personnalisée dans une scission qui a été créée ou déplacée vers
:FocusSplitDown cmd term
J'ai un petit affichage et je trouve que les divisions sont trop redimensionnées
Si, par exemple, votre résolution d'écran est de 1024x768 -> c'est-à-dire du côté plus petit, vous remarquerez peut-être que la mise au point par défaut peut trop maximiser une fenêtre.
Autrement dit, la fenêtre «écrasera» certains de vos autres divisions en raison de l'immobilier à écran limité. Ce n'est pas un problème avec Focus, mais un problème avec un immobilier minimal à l'écran. Dans ce cas, vous pouvez simplement réduire la largeur / hauteur de focus.
La fenêtre QuickFix s'ouvre toujours dans la bonne division. Est-ce causé par focus.lua?
Non. Il s'agit d'une décision de conception documentée par Core VIM, cela pourrait être quelque chose qui peut être ajusté en amont.
En attendant, vous pouvez ouvrir une fenêtre QuickFix occupant la pleine largeur de la fenêtre avec :botright copen
J'ai essayé de charger la mise au point de chargement :FocusToggle , mais j'ai besoin de le basculer à nouveau pour faire fonctionner automatiquement
Veuillez noter que si vous vous chargez paresseux avec la commande :FocusToggle , il chargera la mise au point, mais le basculera initialement. Voir # 34.
En effet, le focus est basculé par défaut lorsque vous chargez la mise au point, donc si vous le chargez, puis exécutez la commande :FocusToggle , il le bascule à nouveau.
S'il vous plaît avant de soumettre une installation de PR Stylua et exécutez-la dans le dossier racine de focus.nvim .
stylua . Cela formatera le code conformément aux directives définies dans .stylua.toml .
Vous pouvez exécuter les tests à l'aide make test si vous initialisez les sous-modules GIT.