epwalsh / obsidian.nvim

Obsidian 🤝 Neovim
Apache License 2.0
3.91k stars 178 forks source link

Does weird things to my indentation #153

Closed willthong closed 10 months ago

willthong commented 1 year ago

🐛 Describe the bug

At the end of an unordered list, I hit 'o'. Expected behaviour without obsidian.nvim installed is to enter insert mode, start a new line, and the cursor is at a position matching the indentation of the previous line (0/4/8 etc).

However, with obsidian.nvim enabled, it always adds an extra level of indentation (4/8/12 etc). In case it helps for debugging, it seems to highlight the characters before the cursor on the line, but that highlight disappears as soon as I start typing.

Versions

NVIM v0.9.1 Build type: Release LuaJIT 2.1.0-beta3

Obsidian v1.11.0

local plugins = { "yonchu/accelerated-smooth-scroll", "iamcco/markdown-preview.nvim", { "overcache/NeoSolarized", lazy = false, priority = 1000, config = function() vim.cmd [[ colorscheme NeoSolarized ]] end }, "jose-elias-alvarez/null-ls.nvim", "neovim/nvim-lspconfig", "nvim-lua/plenary.nvim", "tpope/vim-repeat", "mbbill/undotree", "tpope/vim-fugitive", "machakann/vim-highlightedyank", "lifepillar/vim-mucomplete", "tpope/vim-surround", "folke/which-key.nvim", "tpope/vim-commentary", "tpope/vim-unimpaired", "nvim-lualine/lualine.nvim", "kyazdani42/nvim-web-devicons", { "epwalsh/obsidian.nvim", event = { "BufReadPre /home/will/Seafile/Seafile/WillWiki/.md" }, -- If you want to use the home shortcut '~' here you need to call 'vim.fn.expand': -- event = { "BufReadPre " .. vim.fn.expand "~" .. "/my-vault/.md" }, dependencies = { -- Required. "nvim-lua/plenary.nvim",

    -- Optional, for completion.
    -- "hrsh7th/nvim-cmp",

    -- Optional, for search and quick-switch functionality.
    -- "nvim-telescope/telescope.nvim",

    -- Optional, an alternative to telescope for search and quick-switch functionality.
    -- "ibhagwan/fzf-lua"

    -- Optional, another alternative to telescope for search and quick-switch functionality.
    -- "junegunn/fzf",
    -- "junegunn/fzf.vim"

    -- Optional, alternative to nvim-treesitter for syntax highlighting.
    -- "godlygeek/tabular",
    "preservim/vim-markdown",

  },
  opts = {
    dir = "[redacted]",  -- no need to call 'vim.fn.expand' here
    -- Optional, if you keep notes in a specific subdirectory of your vault.
    -- notes_subdir = "notes",

    -- Optional, set the log level for Obsidian. This is an integer corresponding to one of the log
    -- levels defined by "vim.log.levels.*" or nil, which is equivalent to DEBUG (1).
    log_level = vim.log.levels.DEBUG,

    -- daily_notes = {
      -- Optional, if you keep daily notes in a separate directory.
    --   folder = "notes/dailies",
      -- Optional, if you want to change the date format for daily notes.
    --   date_format = "%Y-%m-%d"
    -- },

    -- Optional, completion.
    completion = {
      -- If using nvim-cmp, otherwise set to false
      nvim_cmp = false,
      -- Trigger completion at 2 chars
      min_chars = 2,
      -- Where to put new notes created from completion. Valid options are
      --  * "current_dir" - put new notes in same directory as the current buffer.
      --  * "notes_subdir" - put new notes in the default notes subdirectory.
      new_notes_location = "current_dir"
    },

    -- Optional, customize how names/IDs for new notes are created.
    note_id_func = function(title)
      -- Create note IDs in a Zettelkasten format with a timestamp and a suffix.
      -- In this case a note with the title 'My new note' will given an ID that looks
      -- like '1657296016-my-new-note', and therefore the file name '1657296016-my-new-note.md'
      local suffix = ""
      if title ~= nil then
        -- If title is given, transform it into valid file name.
        suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower()
      else
        -- If title is nil, just add 4 random uppercase letters to the suffix.
        for _ = 1, 4 do
          suffix = suffix .. string.char(math.random(65, 90))
        end
      end
      return tostring(os.time()) .. "-" .. suffix
    end,

    -- Optional, set to true if you don't want Obsidian to manage frontmatter.
    disable_frontmatter = false,

    -- Optional, alternatively you can customize the frontmatter data.
    note_frontmatter_func = function(note)
      -- This is equivalent to the default frontmatter function.
      local out = { id = note.id, aliases = note.aliases, tags = note.tags }
      -- `note.metadata` contains any manually added fields in the frontmatter.
      -- So here we just make sure those fields are kept in the frontmatter.
      if note.metadata ~= nil and require("obsidian").util.table_length(note.metadata) > 0 then
        for k, v in pairs(note.metadata) do
          out[k] = v
        end
      end
      return out
    end,

    -- Optional, for templates (see below).
    templates = {
      subdir = "templates",
      date_format = "%Y-%m-%d-%a",
      time_format = "%H:%M",
    },

    -- Optional, by default when you use `:ObsidianFollowLink` on a link to an external
    -- URL it will be ignored but you can customize this behavior here.
    follow_url_func = function(url)
      -- Open the URL in the default web browser.
      vim.fn.jobstart({"open", url})  -- Mac OS
      -- vim.fn.jobstart({"xdg-open", url})  -- linux
    end,

    -- Optional, set to true if you use the Obsidian Advanced URI plugin.
    -- https://github.com/Vinzent03/obsidian-advanced-uri
    use_advanced_uri = false,

    -- Optional, set to true to force ':ObsidianOpen' to bring the app to the foreground.
    open_app_foreground = false,

    -- Optional, by default commands like `:ObsidianSearch` will attempt to use
    -- telescope.nvim, fzf-lua, and fzf.nvim (in that order), and use the
    -- first one they find. By setting this option to your preferred
    -- finder you can attempt it first. Note that if the specified finder
    -- is not installed, or if it the command does not support it, the
    -- remaining finders will be attempted in the original order.
    -- finder = "telescope.nvim",
  },
  config = function(_, opts)
    require("obsidian").setup(opts)

    -- Optional, override the 'gf' keymap to utilize Obsidian's search functionality.
    -- see also: 'follow_url_func' config option above.
    vim.keymap.set("n", "gf", function()
      if require("obsidian").util.cursor_on_markdown_link() then
        return "<cmd>ObsidianFollowLink<CR>"
      else
        return "gf"
      end
    end, { noremap = false, expr = true })
  end,
}

}

willthong commented 1 year ago

Realised this was a problem with the "preservim/vim-markdown" plugin. The setting can be fixed (let g:vim_markdown_new_list_item_indent = 0) but the plugin has some other problems (eg long bullet point text isn't indented sensibly as with default Vim).

Is there a way to enable Vim's default Markdown highlighting rather than relying on a plugin?

epwalsh commented 1 year ago

Hey @willthong, you're right this is definitely a vim-markdown thing, and I find it counterintuitive as well. But vim-markdown is not required for obsidian.nvim to work, so feel free to exclude it.

willthong commented 1 year ago

Fantastic - thanks, I have excluded it.

Is there a reason Vim's built-in markdown syntax highlighting is disabled on Obsidian files? Thanks!

epwalsh commented 1 year ago

Is there a reason Vim's built-in markdown syntax highlighting is disabled on Obsidian files? Thanks!

Hmm, this is not intended 🤔 I'm not super familiar with Vim syntax stuff, but maybe our additional syntax highlighting rules are conflicting with Vim's built-in. I'll do some digging.

epwalsh commented 1 year ago

When I disable vim-markdown I still get some highlighting, but headers are not highlighted...

epwalsh commented 10 months ago

Our syntax files have been removed so I'm closing this.