Sempre tenha uma bela vista sobre suas janelas divididas
Nota : Para referência, este screencast apresenta dimensões definidas para 40 linhas e 120 colunas.
Veja uma demonstração visual de cada recurso de foco aqui .
Aqui estão os trechos de código para alguns métodos de instalação comuns (use apenas um):
| Repo Github | Filial | Trenó de código |
|---|---|---|
| Biblioteca 'focus.nvim' | Principal | { 'nvim-focus/focus.nvim', version = false }, |
| Estável | { 'nvim-focus/focus.nvim', version = '*' }, |
| Repo Github | Filial | Trenó de código |
|---|---|---|
| Biblioteca 'focus.nvim' | Principal | use 'nvim-focus/focus.nvim' |
| Estável | use { 'nvim-focus/focus.nvim', branch = 'stable' } |
| Repo Github | Filial | Trenó de código |
|---|---|---|
| Biblioteca 'focus.nvim' | Principal | Plug 'nvim-focus/focus.nvim' |
| Estável | 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 configuração básica com todas as baterias incluídas:
require ( " focus " ). setup ()A configuração pode ser passada para a função de configuração. Aqui está um exemplo com as configurações padrão:
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 gerenciar as visualizações da janela ao redimensionar, consulte
:h splitkeep.
Para usuários de neovim> = 0,10, é recomendável usarsplitkeep=cursor.
Para usuários de neovim <= 0.8, é recomendável usar o plug -in de estabilização. Para os usuários do LAZYVIM, eles definemopt.winminwidth = 5nas opções padrão podem causar conflitos com os plugins de gerenciamento de sessão.
Ativar/desativar o foco
-- Completely disable this plugin
-- Default: true
require ( " focus " ). setup ({ enable = false })Ativar/desativar comandos de foco
-- This not export :Focus* commands
-- Default: true
require ( " focus " ). setup ({ commands = false })Habilitar/desativar a janela de foco automousizando
-- The focussed window will no longer automatically resize. Other focus features are still available
-- Default: true
require ( " focus " ). setup ({ autoresize = { enable = false } })Defina a largura do foco
-- Force width for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { width = 120 } })Defina o foco de largura mínima
-- Force minimum width for the unfocused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { minwidth = 80 } })Defina a altura do foco
-- Force height for the focused window
-- Default: Calculated based on golden ratio
require ( " focus " ). setup ({ autoresize = { height = 40 } })Defina o foco de altura mínima
-- Force minimum height for the unfocused window
-- Default: 0
require ( " focus " ). setup ({ autoresize = { minheight = 10 } })Defina o foco 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 })Ao criar uma nova janela dividida, faça/não a inicialize como um buffer vazio
-- 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 } })Definir números de automóveis focais
-- Displays line numbers in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { number = false } })Definir números relativos automáticos do foco
-- 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 } })Definir números híbridos automáticos de foco
-- 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 } })Defina os números absolutos de preservação
-- Preserve absolute numbers in the unfocussed windows
-- Works in combination with relativenumber or hybridnumber
-- Default: false
require ( " focus " ). setup ({ ui = { absolutenumber_unfocussed = true } })Ao criar uma nova janela dividida, use o TMUX Split em vez de neovim
-- True: Create tmux splits instead of neovim splits
-- False: Create neovim split windows
-- Default: false
require ( " focus " ). setup ({ split = { tmux = true } })Defina a linha de cursor de foco focal
-- Displays a cursorline in the focussed window only
-- Not displayed in unfocussed windows
-- Default: true
require ( " focus " ). setup ({ ui = { cursorline = false } })Definir a coluna do cursor automático do foco
-- Displays a cursor column in the focussed window only
-- See :help cursorcolumn for more options
-- Default: false
require ( " focus " ). setup ({ ui = { cursorcolumn = true } })Defina a coluna de cores automática do foco
-- 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 '
}
}
})Defina a coluna de sinal automático de foco
-- 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 } })Defina a janela de foco destacando
-- 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 ) O foco pode ser desativado definindo uma variável para apenas uma janela, ( vim.w.focus_disable = true ), apenas um buffer ( vim.b.focus_disable = true ) ou globalmente ( vim.g.focus_disable = true ).
Se você deseja desativar o foco para determinados tipos de buffer ou arquivos, poderá fazer isso configurando autocomandos ( :help autocmd ) em sua configuração.
Aqui está um exemplo:
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 obter mais informações sobre os comandos abaixo, role para baixo para vê -los, cada um descrito em mais detalhes
| Comando | Descrição |
|---|---|
:FocusDisable | Desative o plug -in por sessão. As divisões serão normalizadas de volta aos padrões e depois espaçadas uniformemente. |
:FocusEnable | Ative o plug -in por sessão. As divisões serão redimensionadas de volta às suas configurações ou padrões se não forem definidos. |
:FocusToggle | Alternar o foco (globalmente) ligado e desativado novamente. |
:FocusSplitNicely | Divida uma janela com base na regra da proporção dourada. |
:FocusSplitCycle | Se não houver divisões, crie uma e vá para ela, caso contrário, o ciclo focado em divisão. :FocusSplitCycle reverse para o sentido anti -horário |
:FocusDisableWindow | Desative o redimensionamento da janela atual (Winnr). |
:FocusEnableWindow | Ativar redimensionamento da janela atual (WINNR). |
:FocusToggleWindow | Tire o foco e desative novamente por janela. |
:FocusDisableBuffer | Desativar redimensionamento para o buffer atual (BUFNR). |
:FocusEnableBuffer | Habilite o redimensionamento do buffer atual (BUFNR). |
:FocusToggleBuffer | TOMENTO FOCO E DEILHE NOVAMENTE EM uma base de buffer. |
:FocusSplitLeft | Mova -se para existir ou crie uma nova divisão à esquerda da janela atual + arquivo aberto ou comando personalizado. |
:FocusSplitDown | Mova -se para existente ou crie uma nova divisão na parte inferior da janela atual + arquivo aberto ou comando personalizado. |
:FocusSplitUp | Mova para existir ou crie uma nova divisão para a parte superior da janela + arquivo aberto atual ou comando personalizado. |
:FocusSplitRight | Mova para existir ou crie uma nova divisão à direita da sua janela + arquivo aberto atual ou comando personalizado. |
:FocusEqualise | Equaliza temporariamente as divisões para que elas sejam de largura/altura semelhante. |
:FocusMaximise | Maximiza temporariamente a janela focada. |
:FocusMaxOrEqual | Alterna entre as divisões equalizadas ou a janela focada maximizada. |
O Focus permite que você divida as janelas em janelas de azulejos e dimensionado de acordo com a proporção dourada.
+----------------+------------+
| | S1 |
| | |
| +------------+
| | |
| MAIN PANE | S2 |
| | |
| | |
| | |
+----------------+------------+
Para obter essa visualização, você pressionaria a combinação de teclas 2 vezes.
<Cl> keymap ( ' n ' , ' <c-l> ' , function ()
require ( ' focus ' ). split_nicely ()
end , { desc = ' split nicely ' }) Além disso, você pode abrir um arquivo ou executar um comando personalizado com o comando :FocusSplitNicely
Abre um arquivo na divisão criada pelo comando FocusSplitNicely
:FocusSplitNicely README.md
Abre uma janela de terminal na divisão criada pelo comando FocusSplitNicely usando o cmd arg para executar um comando personalizado
:FocusSplitNicely cmd term
Em vez de se preocupar com vários comandos e atalhos, basta pensar em dividir sobre qual direção você gostaria de seguir .
Chamando um comando de foco dividido, ou seja: o focussplitright fará uma de duas coisas, ele tentará passar para a janela na direção especificada. Caso contrário, se não houver janela na direção especificada em relação à janela atual , ela criará uma nova janela de buffer em branco na direção especificada e depois moverá para essa janela.
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 ' ) Além disso, você pode abrir um arquivo ou executar um comando personalizado com o comando :FocusSplit<direction>
Abre um arquivo em uma divisão que foi criada ou movida para
:FocusSplitRight README.md
Abrindo uma janela do terminal usando o cmd arg para executar um comando personalizado em uma divisão que foi criada ou movida para
:FocusSplitDown cmd term
Eu tenho uma pequena exibição e estou descobrindo que as divisões são redimensionadas demais
Se, por exemplo, sua resolução de tela for 1024x768 -> IE no lado menor, você poderá notar que o foco por padrão pode maximizar uma janela demais .
Ou seja, a janela meio que 'esmagará' algumas de suas outras divisões devido ao setor imobiliário limitado de tela. Este não é um problema com o foco, mas um problema com o mínimo de imóveis em tela. Nesse caso, você pode simplesmente reduzir a largura/altura do foco.
A janela Quickfix é aberta na divisão direita sempre. Isso é causado pelo foco.lua?
Não. Esta é uma decisão de design documentada do Core Vim, isso pode ser algo que pode ser ajustado a montante.
Enquanto isso, você pode abrir uma janela Quickfix ocupando a largura total da janela com :botright copen
Tentei focar na carga preguiçosa com :FocusToggle , mas preciso alterná-lo novamente para obter o trabalho automático do trabalho
Observe que se você carregar com comando com comando :FocusToggle , ele carregará o foco, mas o desligará inicialmente. Veja #34.
Isso ocorre porque o foco é atribuído por padrão quando você carrega o foco; portanto, se você o carregar e executar o comando :FocusToggle , ele o desligará novamente.
Antes de enviar um Stylua de instalação de relações públicas e executá -lo na pasta raiz do focus.nvim .
stylua . Isso formará o código de acordo com as diretrizes definidas em .stylua.toml .
Você pode executar os testes usando make test se você inicializar os submódulos Git.